Exception Handling



  • sind die neuen C++ Standard Header, die alle im Namensbereich std stehen.
    Deshalb das using namespace std;



  • Alex: willkommen zum ISO-C++ Standard, brandneu, druckfrisch, Tinte noch feucht, gerade erst (vor 5 Jahren) erschienen! 😃



  • mal OT: die ganze STL schmeisst doch eigentlich exceptions, oder? d.h. ein wirklich korrektes hello world wäre dann

    #include <iostream>
    
    int main ()
    {
        try
        {
            std::cout << "Hello World!" << std::endl;
        }
        catch (...) { } // angenommen, ich hätte oben speicher allokiert, müsste ich hier vorbeugen 
    }
    

    oder übertreib ichs da eetwas



  • etwas.
    aber im prinzip hast du recht



  • Ich denke nicht, dass das Exceptions werfen kann. Da wird ja kein Speicher angefordert, und ostream schmeißt ansonsten nur dann Exceptions, wenn man das explizit anfordert. Kandidaten für Exceptions sind hauptsächlich Konstruktoren und new-Ausdrücke (da fällt z.B. Zuweisung und Wertübergabe benutzerdefinierter Typen mit rein), dazu vereinzelte Dinge wie vector::at() oder dynamic_cast<Foo&>().
    Und Reallokationen in Containern hab ich noch vergessen ... jedes push_back kann einem um die Ohren fliegen.

    [ Dieser Beitrag wurde am 09.07.2003 um 00:10 Uhr von Bashar editiert. ]



  • Original erstellt von Korbinian:
    mal OT: die ganze STL schmeisst doch eigentlich exceptions, oder?

    die STL wirft (fast) garnix.
    new wirft std::bad_alloc wenn es nicht mit std::nothrow aufgerufen wird
    und die .at() methoden machen einen range check und werden dann uU ne exception, deswegen verwendet niemand .at() weils lahm ist.

    weiters kann man bei den streams bestimmte exceptions werfen lassen (die man per .exceptions() registrierern kann) - warum die das nicht von vornherein tun ist mir nicht ganz klar 😞

    d.h. ein wirklich korrektes hello world wäre dann

    oder übertreib ichs da eetwas

    jo, du uebertreibst.
    theoretisch ist es moeglich, dass std::bad_alloc fliegt, naemlich dann wenn cout gepuffert ist und die allokation von "Hello World!" fehl schlaegt.

    realistisch gesehen wird das nie passieren.



  • Original erstellt von Shade Of Mine:
    **theoretisch ist es moeglich, dass std::bad_alloc fliegt, naemlich dann wenn cout gepuffert ist und die allokation von "Hello World!" fehl schlaegt.
    **

    Der Puffer wird hoffentlich im Konstruktor angelegt, nicht erst bei der ersten Ausgabe.



  • liest man nicht in streits, ob endl oder nicht, immer, dass cout ungepuffert ist und man deshalb kein endl braucht?



  • Eigentlich nicht. Man liest, dass cout den Puffer in allen nötigen Situationen selbständig ausleert, zB vor der Eingabe.



  • Nö. Nur cerr ist ungepuffert.


Anmelden zum Antworten