std::cin 错误状态和变量更改

std::cin error state and variable changing

本文关键字:变量 状态 cin 错误 std      更新时间:2023-10-16

我认为,如果cin进入错误状态,它流入的变量保持不变。 但是,以下似乎是一个反例:

#include <iostream>
using namespace std;
int main()
{
  cout << "Enter int: ";
  int i = 5;
  cin >> i;
  if(cin.fail()) cout << "failed n";
  cout << "You entered: " << i << "n";
}

运行:

Enter int: g
failed 
You entered: 0

我去哪儿了哦,这么错了?

行为在 C++11 中发生了变化。失败的整数提取现在将变量设置为 0。

即使没有-std=c++11标志,GCC 4.8 也表现出新的行为,这可能是库的错误/限制。只有一个libstdc++,它不知道使用哪些编译器标志来编译main