0

boost::lexical_cast 在将字符串转换为 int8_t 时抛出异常,但 int32_t - norm。

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

1 回答 1

1

对于boost::lexical_cast,基础流的字符类型假定为 char,除非源或目标需要宽字符流,在这种情况下,基础流使用 wchar_t。以下类型也可以使用 char16_t 或 char32_t 进行宽字符流

提升词汇演员表

因此,在您的代码中进行以下更改后:

#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.

因此,for 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 的两个值。

我希望它有帮助!

于 2019-07-01T09:02:53.180 回答