std::stoull()
不会对绝对错误的输入抛出任何异常。
出现此问题的代码示例:
#include <iostream>
#include <exception>
#include <string>
#include <sstream>
using namespace std;
int main() {
stringstream ss("6yh45gu94j5vun:");
string valueStr;
if (!getline(ss, valueStr, ':')) {
return -1;
}
unsigned long long value;
try {
value = stoull(valueStr, nullptr, 16);
} catch (exception& e) {
cout << -1;
return -1;
}
cout << value;
}
我试图捕捉每一个异常,但仍然不起作用。
你能帮我吗?
1条答案
按热度按时间gwo2fgha1#
函数
std::stoull
没有抛出异常,因为它成功地将输入转换为整数6
。一旦遇到无法转换的字符,它将停止阅读。如果至少转换了一个字符,则认为转换成功。如果要确定它转换了多少输入,则必须使用
std::stoull
的第二个参数,而不是将其设置为nullptr
。为了使用第二个参数,必须定义一个附加变量
然后这样调用函数:
如果没有抛出异常,则变量
num_chars_converted
将包含转换的字符数。然后,您可以将该值与字符串的长度进行比较,以确定是否转换了整个字符串。