2010-11-25 7 views
12

Ich weiß, dass die STL auf einen Speicherzuweisungsfehler werfen wird oder wenn der enthaltene Typ seinen Konstruktor/Zuweisungsoperator auslöst.Gibt es eine Liste von STL-Container-Methoden, die irgendwo eine Ausnahme auslösen können?

Andernfalls können anscheinend 'ein paar' STL-Methoden andere Ausnahmen auslösen. Das Beispiel, das jeder zu erwähnen scheint, ist vector :: at(), aber ich kann nirgends eine Liste der anderen finden.

Kennt jemand eine solche Liste?

+3

Ich weiß nicht, von einem. Angesichts der Tatsache, dass (fast) keine zwei Leute der Grenze zwischen "STL" - und "Nicht-STL" -Teilen der C++ - Standardbibliothek zustimmen, würde eine einfache Mehrheit der C++ - Programmierer eine solche Liste zumindest in gewisser Hinsicht als "falsch" betrachten. –

+0

@Jerry: Der Titel beschränkt sich speziell auf STL-Container, was einen ziemlich klaren Umfang hat (sogar unter Berücksichtigung von common/tr1-Erweiterungen). –

+0

Es gibt auch das Problem, dass jeder Benutzer deklarierte Kopie ctor, op = kopieren, bewegen ctor, und verschieben op = kann alles werfen ... –

Antwort

16

Wird nicht 100% genau sein, und ist für C++ 03, aber eine halbe Stunde Aufwand basierend auf GREP durch GCC 4.3.4 enthält, Ignorieren tr1 und ext, aber einschließlich Iostream. Entscheidend ist, könnten einige dieser Kontrollen darauf zurückzuführen sein, diese Implementierung defensiver Codierung Bevorzugung des, und vielleicht nicht allgemein in der Standard- und verfügbar beauftragt werden ....

  • bitset
    • std::overflow_error - .to_ulong(), wenn zu viele operator[]() Versuch über das Ende
  • new - Bits lang in unsigned
  • std::out_of_range passen
    • std::bad_alloc
  • typeinfo
    • std::bad_cast auf ungültig dynamic_cast Versuch
  • ios
    • std::ios_base::failure WHE n mit Ausnahme von Masken für die Fehlerberichterstattung
  • string
    • out_of_range - at/append/assign/insert/erase/replace/copy/substr
    • length_error: Versuch max_size() während reserve oder impliziten Resize zu überschreiten (z.B assign/insert/+= usw.
    • )
  • locale
    • std::bad_cast wenn locale enthält keine Facette des Typs Facet
    • std::runtime_error in verschiedenen null-Zeiger/undefinierten Situationen-Facette
  • deque/vector
    • length_error: Versuch reserve() oder implizit wachsen>max_size()
    • out_of_range: at()
  • map
    • std::out_of_range: at()
+0

Danke dafür, ich würde dich wählen, wenn ich mehr Ansehen hätte :-) –

+0

@Tony: keine Sorge - hoffe es hilft. –

3

Nun, ich habe dieses große, gigantische Buch mit dem Titel Der C++ Standard, der eine vollständige Beschreibung aller Funktionen in der Standardbibliothek enthält und was sie nicht tun können/können.

+1

Ja, aber unglücklicherweise ist mein Algorithmus zum Extrahieren der erforderlichen Informationen fehlerhaft. Das heißt, ich könnte eins vermissen :-) –

Verwandte Themen