Was ist der Grund dafür, warum std :: stof, std :: stod, std :: stold throw Ausnahmen?Warum sind std :: stof, std :: stod und std :: stold handle Fehler mit Ausnahmen?
http://en.cppreference.com/w/cpp/string/basic_string/stof
Eingabefehler sind ein häufig verwendetes Beispiel für, wenn Fehler über Behandlung von Ausnahmen sind eine schlechte Passform (in der Regel mit der schrulligen Kreis Argumentation von „außergewöhnlichen Umständen“ ausdrückte, aber immer noch ein gutes Beispiel). Es ist nicht so, als ob andere Fehlerbehandlungsmechanismen in der C++ - Standardbibliothek irgendwie verboten sind. Zum Beispiel zeigt ein anderer C++ 11-Neuling, die std::unordered_map::insert
-Familie, einen Fehler unter Verwendung des zweiten Elements in einem std::pair<iterator,bool>
Rückgabetyp an. Fehler innerhalb einer std::unordered_map::insert
-Funktion scheint viel "außergewöhnlicher" als ein Eingabefehler. Ohne zu versuchen, einzufügen, ist es möglich zu garantieren, dass ein Insert erfolgreich ist, aber ohne zu analysieren, ist es nicht möglich zu garantieren, dass das Parsen erfolgreich ist.
Ich frage mich nur, was das Grundprinzip zu der Zeit war, als diese Funktionen in den Standard aufgenommen wurden. Hoffentlich wird es irgendwo veröffentlicht oder ein Komitee-Mitglied kann vorbeikommen und etwas Licht in die Sache bringen. Ich verlange keine umfassende Abhandlung über die Vor- und Nachteile von Ausnahmen gegenüber anderen Mechanismen.
Es ist offensichtlich, die Tradition der C++ - Standardbibliothek als notorisch schlecht beim Parsing zu halten ... Betrachten Sie zB auch die Signatur von 'strto' *, wenn Sie irgendeine dieser Funktionen in einem handgeschriebenen rekursiven Descent-Parser verwenden , müssen Sie eine Kopie der verbleibenden Eingabe erstellen, bevor Sie sie aufrufen. Oder bedenken Sie die schlechte Zusammensetzbarkeit des Stream-Inputs. Für ein ordentliches Parsing haben Sie zwei Möglichkeiten, rollen Sie Ihre eigenen oder verwenden Sie eine Drittanbieter-Bibliothek. ein Parser-Generator. –