c++ - istream 读取失败时存储的值

标签 c++ c++11 language-lawyer iostream

示例代码:

#include <iostream>

int main()
{
    int x = 5;
    std::cin >> x;
    std::cout << x << '\n';
}

关于 one particular implementation发生以下行为:

  • 输入:6;输出 6
  • 输入:a;输出:0
  • 输入:(文件结束);输出 5
  • 输入:(空格后跟文件结尾);输出 5

因此,如果失败,cin >> x0 分配给 x(如果将文本转换为 int 失败);但如果失败是由于文件结尾,则不会分配 0

这是正确的行为吗?如果不是,根据 C++ 标准,正确的行为是什么?

我记得以前在 SO 上讨论过,从 C++11 开始,所有情况都应该写 0,但我无法使用搜索功能找到任何东西; C++ 标准的 iostreams 部分非常繁重。

最佳答案

是的,这是自 C++11 以来的正确行为。

您所看到的不同之处在于,“提取失败时”会写入一个零,但如果流上已经设置了 EOF,则甚至不会尝试提取……因此什么也不会发生。

关于c++ - istream 读取失败时存储的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32945923/

相关文章:

c - 如果通过限制指针发生,实现是否可以优化对非原子访问的原子访问?

c++ - 为什么基于 for 循环的范围类型在大括号初始化列表上是非法的 C++

c++ - 为什么我的 vector 迭代器没有显示 operator=?

c++ - 如何在单击时显示 X、Y 坐标并在控制台中显示

c++ - 嵌套容器的内存分配如何工作?

c++ - 返回 C++ std::string 对象是否可以避免内存泄漏?

c++ - 有状态的元编程格式不正确吗(还)?

c++ - VC++ : Pass multiple arrays between functions

c++ - 是否可以创建模板模板参数列表?

c++ - Linux虚拟机上的离屏渲染