Gibt es einen Verweis auf C++ - Standardbibliotheksausnahmen? Ich will nur wissen, welche Funktionen eine Ausnahme auslösen können oder nicht.C++ Standardbibliothek Ausnahmeliste?
Antwort
Tatsächlich werfen die meisten Standardbibliotheksfunktionen keine Ausnahmen selbst. Sie geben nur Ausnahmen weiter, die von Benutzercode ausgelöst werden, der von ihnen aufgerufen wird. Wenn Sie beispielsweise ein Element zu einem Vektor push_back()
haben, kann dies (aufgrund von Speicherzuordnungsfehlern und) auslösen, wenn der Kopierkonstruktor des Objekts auslöst.
einigen bemerkenswerten Ausnahmen (kein Wortspiel beabsichtigt), wo Bibliotheksfunktionen werfen sind:
- Einige Methoden
out_of_range
werfen, wenn der bereitgestellte Index ist ungültig:std::vector<>::at()
std::basic_string<>::at()
std::bitset<>::set()
,reset()
undflip()
.
- Einige Verfahren werden
std::overflow_error
auf ganzzahlige Überlaufwurf:std::bitset<>::to_ulong()
und (C++ 0x)to_ullong()
.
std::allocator<T>
aufstd::bad_alloc
vonnew
geworfen geben, die sie aufruft.- Streams können so eingerichtet werden, dass
std::ios_base::failure
ausgelöst werden, wenn ein Statusbit gesetzt ist. - Große Zuweisungen Array können
std::bad_array_new_length
- dynamic_cast auf einem Referenz werfen einen
std::bad_cast
(technisch nicht Teil der Standardbibliothek) werfen kann - eine ungültige Ausnahme von einer Funktion mit einer Ausnahme-Spezifikation Werfen ein
std::bad_exception
- werfen Rufen Sie eine
std::function::operator(...)
auf, wenn es keinen Wert hat, wirdstd::bad_function_call
geworfen. - Mit
typeinfo
eines Null-Pointer kann einestd::bad_typeid
werfen. - Der Zugriff auf eine
weak_ptr
nach der Veröffentlichung der Pointe wird einestd::bad_weak_ptr
werfen. - Falsche Verwendung von
std::promise/std::future
kann einestd::future_error
werfen. - (C++ 11) Die String-Umwandlungsfunktionen
std::stoi
,std::stol
,std::stoll
,std::stoul
,std::stoull
,std::stof
,std::stod
undstd::stold
können beidestd::invalid_argument
undstd::out_of_range
werfen. - (C++ 11) In der Regex-Familie können Konstruktoren und Assign-Methoden
std::regex_error
werfen.
(Ich mache dieses eine CW Antwort, also wenn jemand von mehr so denken kann, wenden Sie sich bitte sie hier anhängen.)
Auch für die 3. Ausgabe von Die C++ Programmiersprache, Bjarne Stroustrup hat eine herunterladbare appendix about exception safety, die relevant sein könnte.
+1 für den Link. Ich habe gerade angefangen, es zu lesen. –
Danke für Ihre Antwort. Übrigens, was ist die CW-Antwort? – Brian
@Brian: Es ist "Community Wiki". Anderen steht es frei, jede CW-Antwort zu bearbeiten (auch wenn sie nicht die Möglichkeit haben, Antworten normal zu bearbeiten). – sbi
Die einzigen Funktionen garantiert (durch den Compiler) Funktionen nicht zu werfen, die die throw()
Ausnahme der Spezifikation, wie folgt aus:
void ThisFunctionNeverThrows() throw()
{
}
Andernfalls eine andere Funktion möglicherweise eine Ausnahme auslösen kann, es sei denn sie spezifisch sind anders dokumentiert. Beim Schreiben von Code angesichts von Ausnahmen müssen Sie die Ausnahmesicherheit berücksichtigen.
Siehe Artikel von Bjarne Stroustup über Ausnahmesicherheit und die Standardbibliothek: http://www2.research.att.com/~bs/3rd_safe.pdf Ab Seite 19 im PDF finden Sie Informationen über Garantien, die von den Standardcontainern gestellt werden.
Dies ist nicht korrekt, da viele Container, z.B. garantieren Sie, dass Sie 'Erase()' nicht einfügen, aber diese Funktion ist nicht 'throw()'. Aus der Sicht der Sprache macht das, was Sie geschrieben haben, Sinn, aber es gibt andere Garantien als die, die vom Compiler erzwungen werden. – doublep
@doublep: 'erase()' * wird * werfen, wenn der Kopierkonstruktor des Elementtyps auslöst. – kennytm
Ab Seite 21 in der PDF erwähnt ich (Garantien für "Vektor" und "Deque"): "Wenn nicht durch den Kopierkonstruktor oder den Zuweisungsoperator des Elementtyps ausgelöst wird, löst keine' erase() 'eine Ausnahme aus." –
- 1. Versionen der C++ - Standardbibliothek
- 2. Fehlende Ausnahmeliste in Visual Studio
- 3. Inneres Arbeiten der C-Standardbibliothek
- 4. Hat Objective-C eine Standardbibliothek?
- 5. Visual Studio 2013 C++ Standardbibliothek
- 6. Matrix Standardbibliothek
- 7. Calltree für c + + Programm zur Standardbibliothek
- 8. C++ - Standardbibliothek - Std :: setenv vs setenv
- 9. Komplette Online-Referenz für die C-Standardbibliothek?
- 10. Wo sind die Header der C++ - Standardbibliothek
- 11. Seiten programmatisch zur Ausnahmeliste von Java hinzufügen
- 12. Verwendung von C-Strings in der C++ - Standardbibliothek
- 13. Hat Fortran eine Standardbibliothek?
- 14. Stabilisierung der Standardbibliothek qsort?
- 15. Embed Python3 ohne Standardbibliothek
- 16. Dokumentation der SBCL-Standardbibliothek?
- 17. C++ Standardbibliothek: initialisieren einen Behälter unter Verwendung von Standardeingabe
- 18. Wird die C++ - Standardbibliothek auf Arduino vollständig unterstützt?
- 19. Welche Ausnahmeklassen befinden sich in der C++ - Standardbibliothek?
- 20. in C++ - Standardbibliothek, Zuordnung zu einem Kartenelement bei Index -1
- 21. C++ - Datenstruktur (Standardbibliothek) dump (wie die Python-Druckfunktion)
- 22. Gibt es in der C++ - Standardbibliothek eine reine virtuelle Funktion?
- 23. openjdk: So fügen Sie eine Site zur Ausnahmeliste hinzu
- 24. Benutzer mehrmals mit Standardbibliothek anwenden
- 25. Verwendung der Standardbibliothek mit Clang und LibTooling
- 26. Was garantiert die Standardbibliothek für die Selbstbewegung?
- 27. Gibt es eine logische (boolesche) XOR-Funktion in der C- oder C++ - Standardbibliothek?
- 28. Ist die Python-Standardbibliothek wirklich Standard?
- 29. .Net-Standardbibliothek für einzelne Thread-Ausführung
- 30. PEP 257 Docstring in der Standardbibliothek?
Related: http://StackOverflow.com/Questions/11938979/What-Exception-Classes-are-in-the-Standard-CLibrary –