Exceptions in STL
-
Hallo NG,
ich würde gerne wissen, welche Exceptions ich von STL Container Methoden wie z.B. von
vector.at(x);erwarten kann. Wer weiß eine gute Referenz im Netz, in der ich zu jeder Methode alle Exceptions aufgelistet bekomme.
Grüße,
M.Incani
-
Wirft eine std::out_of_range Exception.
Referenz? ISO-Standard oder jedes gute C++ Standardlibrary Buch. Oder die MSDN, die ist sehr gut dafür geeignet. Oder www.cppreference.com sagt auch das es eine Exception wirft, leider nicht welche.
-
Artchi schrieb:
Wirft eine std::out_of_range Exception.
Referenz? ISO-Standard oder jedes gute C++ Standardlibrary Buch. Oder die MSDN, die ist sehr gut dafür geeignet. Oder www.cppreference.com sagt auch das es eine Exception wirft, leider nicht welche.
Soviel hab ich auch herausgefunden. Aber sogar die Orginal STL Doku von SGI http://www.sgi.com/tech/stl/ schweigt zu den Exceptions. Ich bin mir ziemlich sicher, das z.B.
container.push_back(x)auch eine Exception wirft, aber welche.
Grüße,
M. Incani
-
Im Standard ist nicht vorgeschrieben welche Exception push_back werfen darf, nur das bei einer Exception der Container unverändert bleiben muß. Es scheint also implementationsabhängig zu sein.
-
Na, in die STL-Doku von SGI würde ich auch nicht schauen. Ist ja keine Standardlibrary. Mußt du schon in eine Std-Lib-Doku schauen! Was spricht gegen die MSDN oder Dinkumware oder GNU? Die sind alle recht ausführlich.
-
http://www.kharchi.de/cppratgeber3.htm#3.3_Standard_Exceptions
Da wo du dir nicht sicher bist, welcher Typ geworfen wird, kannst du dann halt einfach std::exception abfangen. Finde ich auch ein wenig lächerlich vom C++ Komitee, das die die Exceptions in C++ noch so stiefmütterlich behandeln.
-
push_back() wirft von sich aus höchstens out_of_memory-Exceptions (und natürlich Exceptions, die bei den Kopier-Operationen der Elemente auftreten könnten). Aber mit einem
catch(std::exception&)solltest du eigentlich alles erwischen, was irgendwo aus der Standardbibliothek geworfen werden könnte.(und wenn du clever bist, hängst du deine eigenen Ausnahmen auch in diese Hierarchie ein ;))