Lexical_cast 抛出异常

Lexical_cast throws exception

boost::lexical_cast 在将字符串转换为 int8_t 期间抛出异常,但 int32_t - 标准。

int8_t 有什么问题?

#include <iostream>
#include <cstdlib>
#include <boost/lexical_cast.hpp>

int main()
{
    try
    {
        const auto a = boost::lexical_cast<int8_t>("22");
        std::cout << a << std::endl;
    }
    catch( std::exception &e )
    {
        std::cout << "e=" << e.what() << std::endl;
    }
}

对于boost::lexical_cast,底层流的字符类型假定为char,除非Source或Target需要wide-character流,在这种情况下底层流使用wchar_t.以下类型也可以使用 char16_t 或 char32_t 用于 wide-character streaming

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 and 22

所以,我觉得每个字都当成char.

因此,对于 const auto a = boost::lexical_cast<int16_t>("2"); 2 被视为单个 char 需要 int8_t.

并且,对于 const auto b = boost::lexical_cast<int16_t>("22"); 22 被视为需要 int16_t.

的两个 char

希望对您有所帮助!