Lexical_cast引发异常

时间:2019-07-01 08:41:47

标签: c++ boost lexical-cast

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;
    }
}

1 个答案:

答案 0 :(得分:1)

对于boost::lexical_cast,除非源或目标要求宽字符流传输,否则基础流的字符类型假定为char,在这种情况下基础流使用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

所以,我觉得每个字符都被当作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值。

希望对您有帮助!