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
因此,在对代码进行以下更改后:
#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
值
希望对您有所帮助!
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
因此,在对代码进行以下更改后:
#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
值
希望对您有所帮助!