gpt4 book ai didi

c++ - c++0x中如何检测转换是否失败

转载 作者:行者123 更新时间:2023-11-28 00:15:03 24 4
gpt4 key购买 nike

我尝试按如下方式执行字符串到 int 的转换:

#include<iostream>
#include<sstream>
#include<string>

int main(int argc, char ** argv)
{
int i;
char *str = "12a3";
std::stringstream ss;
ss << str;
ss >> i;
std::cout << i << std::endl; //prints 12
}

DEMO

但结果不是我预期的那样。我是一个 Java,老实说,我在等待抛出一些异常。但事实并非如此。是否可以在没有遗留 atoi 函数的情况下以安全的方式执行此类转换。

请注意,我在 C++0x 中因此不能使用 std::stoi

最佳答案

这是正确的行为。将 >>> 转换为 int 的操作成功,这是正确的。

你必须问一个不同的问题。您真正想要执行的测试是:“在我成功读取 int 之后,是否还有流中剩余的字符尚未处理?”

考虑cin。当你做的时候

int x, y;
std::cin >> x;
std::cin >> y;

它尽可能多地从标准输入读取到 x,在第一个非数字处停止。然后,如果第一个数字后只有一些空格,那么它会尝试读取空格后的数字并将该数字存储在 y 中。

所有输入流(无论是 cin 还是实例 stringstream)都应该包含许多字符串/数字/任何内容。每个 >>> 只是尽可能多地读取(成功)。

关于c++ - c++0x中如何检测转换是否失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30873649/

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