Для boost::lexical_cast
символьный тип базового потока считается символом, если только для источника или цели не требуется потоковая передача широких символов, и в этом случае базовый поток использует wchar_t. Следующие типы также могут использовать char16_t или char32_t для потоковой передачи широких символов
Boost Lexical Cast
Итак, после внесения изменений в ваш код ниже:
#include <iostream>
#include <cstdlib>
#include <boost/lexical_cast.hpp>
int main()
{
try
{
const auto a = boost::lexical_cast<int8_t>("2");
const auto b = boost::lexical_cast<int16_t>("22");
std::cout << a << " and "<< b << std::endl;
}
catch( std::exception &e )
{
std::cout << "e=" << e.what() << std::endl;
}
return 0;
}
Дает ниже вывода
2 и 22 * 1014 *
Итак, я чувствую, что каждый персонаж воспринимается как char
.
Итак, для const auto a = boost::lexical_cast<int16_t>("2");
2 принимается значение char
, для которого требуется int8_t.
И, для const auto b = boost::lexical_cast<int16_t>("22");
22 берется два char
значения, для которых требуется int16_t.
Надеюсь, это поможет!