2010-04-29 6 views
12

Можно ли игнорировать исключение boost::lexical_cast при преобразовании int в std::string?lexical_cast int to string

+0

Что вы подразумеваете под «ignore»? – 2010-04-29 09:20:31

+0

Я не понимаю, почему этот прилив может потерпеть неудачу, поэтому я хочу выполнить бросок, не поймав bad_lexical_cast. – dimba

+0

Вы должны ВСЕГДА переносить вызовы, которые могут быть брошены в try, catch blocks. – Konrad

ответ

16

Исключение, вызванное лексической литой при преобразовании int в std::string, не связано с преобразованием, но недоступно ресурсу. Таким образом, вы можете игнорировать это так же, как игнорируете исключение bad_alloc, поднятое оператором new.

+0

Обратите внимание, что я сказал как плакат «при преобразовании int в std :: string» –

5

Как вы говорите, я не считаю, что приведение может привести к сбою для числовых типов для целей преобразования - оно все равно может потерпеть неудачу, потому что строка не может быть выделена, конечно, но люди обычно не поймают эту ошибку, за исключением самый высокий уровень их кода.

0

Если вы «игнорировать» исключение будет распространяться обратно стек вызовов до тех пор, пока не будет пойман в другом месте, или она завершает программу, точка в том, вы может безопасно не перехватывать исключения, не заботясь о вас в программе непрерывного и делать небезопасные/неизвестные вещи (при условии, что «сбой» командной строки является допустимым поведением ошибки или у вас есть другой способ справиться с неизвестными исключениями).

К сожалению, стеки стека исключений не так легко получить на C++, поэтому создание полезных сообщений об ошибках, когда исключения не локализованы локально, не всегда легко.