Я не могу придумать ни одной причины, по которой лексическое приведение к строке должно вызывать bad_lexical_cast
, за исключением пользовательских типов. Если оператор вставки потока ValueType
может установить флаг ошибки в потоке, то это приведет к bad_lexical_cast
. В противном случае нет.
Лично я бы оставил catch
, даже если вы просто конвертируете встроенные модули, такие как int
s; это не повредит, и может поймать ошибки, если вы каким-либо образом измените lexical_cast
, или если есть какой-то крайний случай, который ни вы, ни я не рассмотрели; если вы не обработаете полученное исключение, вы получите прерывание во время выполнения!
Если вы беспокоитесь об издержках исключения, вы можете вместо этого использовать try_lexical_cast
и проверить, что оно возвращает true
, а не перехват. Однако, если оператор вставки потока ValueType
может выдать команду, вам все равно потребуется возможность перехватить это исключение.