取自:cppreference
直到 C++11:
如果提取失败(例如,如果在需要数字的地方输入了一个字母),则值保持不变并设置失败位。
从 C++11 开始:
如果提取失败,则将零写入 value 并设置 failbit。如果提取导致值太大或太小而无法容纳在值中,
std::numeric_limits<T>::max()
或者std::numeric_limits<T>::min()
被写入并设置了失败位标志。
由于此更改,这意味着以下代码段:
int x = 1;
std::cin >> x;
return x;
如果数值转换失败,将1
在 C++11 之前返回,0
否则。
为什么标准委员会会引入如此微妙的突破性变化?或者更确切地说,在 C++11 之前可能有什么样的代码可以保证这种变化?