gpt4 book ai didi

c++ - Lexical_cast 抛出异常

转载 作者:行者123 更新时间:2023-11-28 04:15:08 25 4
gpt4 key购买 nike

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 需要宽字符流,在这种情况下,底层流使用 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 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 被当作两个 char需要 int16_t 的值。

希望对您有所帮助!

关于c++ - Lexical_cast 抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56832513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com