如果您有权访问 C++11 功能,请尝试std::stoi(my_string);
如果您没有,但可以访问 boost 库,请尝试:
std::string str("112211");
int x = 0;
try
{
x = boost::lexical_cast<int>(str);
}
(catch boost::bad_lexical_cast&)
{
}
定义了 boost::lexical 转换(至少对于一般情况),以在istringstream
内部使用(如果您覆盖std::istream& operator>>
for your_type
,您将能够使用 读取您的类型lexical_cast<your_type>(string)
);
如果您也无权访问 boost,请自行开发(此线程中的其他人已经指出如何设置 iostream 以引发异常)。
编辑:滚动你自己的:
template<typename T>
T lexical_cast<T>(const std::string & str)
{
std::istringstream buffer(str);
buffer.exceptions(std::istringstream::failbit);
T retval;
buffer >> retval;
return retval;
}
对于不支持 iostream io 的值类型,您可以具体说明这一点。