Имеется boost::lexical_cast. В случае неудачной попытки преобразования он выбрасывает исключение типа boost::bad_lexical_cast. Предположим, что у нас есть структура, одно из полей которой имеет тип int. Нам надо преобразовать его значение к объекту класса std::string при помощи boost::lexical_cast. Стали бы Вы в подобном случае писать try-catch блок или оставили код без обработки ошибок? Аргументируйте, пожалуйста.
Здравствуйте, FrozenHeart, Вы писали:
FH>Имеется boost::lexical_cast. В случае неудачной попытки преобразования он выбрасывает исключение типа boost::bad_lexical_cast. Предположим, что у нас есть структура, одно из полей которой имеет тип int. Нам надо преобразовать его значение к объекту класса std::string при помощи boost::lexical_cast. Стали бы Вы в подобном случае писать try-catch блок или оставили код без обработки ошибок? Аргументируйте, пожалуйста.
Как ты себе представляешь неудачное преобразование int к string?
Плюнь и забей.
Единственный момент: lexical_cast пользуется глобальной локалью. Для int это некритично, а вот float — можешь отхватить десятичную запятую вместо точки (причём, что коварно, в обратную сторону он захочет получить точку).
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, FrozenHeart, Вы писали:
FH>>Имеется boost::lexical_cast. В случае неудачной попытки преобразования он выбрасывает исключение типа boost::bad_lexical_cast. Предположим, что у нас есть структура, одно из полей которой имеет тип int. Нам надо преобразовать его значение к объекту класса std::string при помощи boost::lexical_cast. Стали бы Вы в подобном случае писать try-catch блок или оставили код без обработки ошибок? Аргументируйте, пожалуйста.
К>Как ты себе представляешь неудачное преобразование int к string?
std::bad_alloc на создании строки например %) ... или чегонить внутри lexical_cast (вроде он на stringstream работал, не знаю как сейчас)...
ясн, что для "обычных" компьютеров можно "плюнуть и забить", но для калькуляторов и прочих нано девайсов, может и "выстрелит" %)
Здравствуйте, zaufi, Вы писали:
К>>Как ты себе представляешь неудачное преобразование int к string?
Z>std::bad_alloc на создании строки например %) ... или чегонить внутри lexical_cast (вроде он на stringstream работал, не знаю как сейчас)...
Z>ясн, что для "обычных" компьютеров можно "плюнуть и забить", но для калькуляторов и прочих нано девайсов, может и "выстрелит" %)
Ну, std::bad_alloc — неизбежно, раз мы с std::string имеем дело. Тем более, что такое исключение при работе с мелкими объектами — это уже агония, можно практически сразу terminate() выполнять.
Что-либо другое вылететь не может, stringstream инициализируется с уже существующей глобальной локалью.
Для калькуляторов lexical_cast — имхо, только для прототипирования.