Этот короткий C++ ведет себя таким образом, который сбивает с толку меня:boost :: lexical_cast <signed char> не может обрабатывать отрицательные числа?
#include <cassert>
#include <iostream>
#include <string>
#include <boost/lexical_cast.hpp>
int main(void) {
signed char c = -2;
assert(c == -2);
c = boost::lexical_cast<signed char>(std::string("-2"));
std::cout << c << "\n";
}
Использование g++ 5.2.1
и boost-1.58.0
, я получаю:
Terminate вызывается после метания экземпляр «подъема :: exception_detail :: clone_impl >» , что(): плохо лексического литая: значение тип источника не может быть истолковано как цель
Почему не может увеличить бросок из строки„-2“т o signed char
, учитывая, что значение -2
представлено этим типом?
Поскольку 'lexical_cast' ведет себя, как если преобразование выполняется через stringstream, и' 'оператор >> для' подписал char' читает символы, а не цифры. –
Как я могу получить желаемое поведение? –
Ничего, я могу сделать 'boost :: lexical_cast (str)', а затем преобразовать в 'signed char', проверяя диапазон ... –