2010-04-29 6 views
12

Kann die Ausnahme boost::lexical_cast bei der Konvertierung von int in std::string ignoriert werden?lexical_cast int zu string

+0

Was meinst du mit "ignorieren"? –

+0

Ich sehe nicht, warum dieser Cast fehlschlagen kann, daher möchte ich Cast ausführen, ohne bad_lexical_cast – dimba

+0

Sie sollten IMMER Anrufe umleiten, die versuchen können, Blöcke zu fangen. – Konrad

Antwort

16

Die durch lexikalische Umwandlung beim Konvertieren eines int in std::string ausgelöste Ausnahme ist nicht mit der Konvertierung verknüpft, aber für die Ressource nicht verfügbar. Sie können dies also auf die gleiche Weise ignorieren, wie Sie die Ausnahme bad_alloc, ausgelöst durch Operator new, ignorieren.

+0

Beachten Sie, dass ich als Poster "beim Konvertieren eines int in std :: string" sagte –

5

Ich glaube nicht, dass die Besetzung für die numerischen Typen aus Umrechnungsgründen fehlschlagen kann - es kann immer noch fehlschlagen, weil die Zeichenkette natürlich nicht zugeordnet werden kann, aber Menschen fangen normalerweise diesen Fehler außer bei die höchste Ebene ihres Codes.

0

Wenn Sie „Ignorieren“, eine Ausnahme wird es auf den Call-Stack propagieren zurück, bis er an anderer Stelle aufgefangen wird, oder es beendet das Programm, wobei der Punkt, den Sie können sicher keine Ausnahmen fangen, ohne sich um Sie sich Gedanken programmieren fortzusetzen und zu tun unsichere/unbekannte Dinge (solange ein "Absturz" zur Eingabeaufforderung ein akzeptables Fehlerverhalten ist oder Sie eine andere Möglichkeit haben, mit unbekannten Ausnahmen umzugehen).

Leider sind Exception-Stack-Traces nicht so einfach in C++ zu bekommen. Daher ist es nicht immer einfach, nützliche Fehlermeldungen zu erzeugen, wenn Exceptions nicht lokal abgefangen werden.