示例代码:
#include <iostream>
int main()
{
int x = 5;
std::cin >> x;
std::cout << x << '\n';
}
关于 one particular implementation发生以下行为:
- 输入:
6
;输出6
- 输入:
a
;输出:0
- 输入:(文件结束);输出
5
- 输入:(空格后跟文件结尾);输出
5
因此,如果失败,cin >> x
将 0
分配给 x
(如果将文本转换为 int 失败);但如果失败是由于文件结尾,则不会分配 0
。
这是正确的行为吗?如果不是,根据 C++ 标准,正确的行为是什么?
我记得以前在 SO 上讨论过,从 C++11 开始,所有情况都应该写 0
,但我无法使用搜索功能找到任何东西; C++ 标准的 iostreams 部分非常繁重。
最佳答案
是的,这是自 C++11 以来的正确行为。
您所看到的不同之处在于,“提取失败时”会写入一个零,但如果流上已经设置了 EOF,则甚至不会尝试提取……因此什么也不会发生。
关于c++ - istream 读取失败时存储的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32945923/