C++不能保证在输入失败时保持变量不变吗?对于旧版本的gcc,像这样的程序会将i的-1值保持为失败(例如,如果输入的是字母而不是输入的数字).使用Ubuntu 10.10(gcc 4.4.5)时,如果输入失败,i将重置为零.
#include <iostream>
int main()
{
int i = -1;
std::cin >> i;
std::cout << "i = " << i << '\n';
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这种行为打破了我的很多代码.我想gcc的人都知道他们在做什么,这很可能是我的错.如果有人知道这个标准,我想知道它对这种情况的看法.
谢谢.
不要依赖变量.依靠流的状态:
if (std::cin >> i) // "if (!std::cin.fail())" would also work
{
// ok
}
else
{
// error
}
Run Code Online (Sandbox Code Playgroud)
至于为什么行为发生了变化,那是因为C++标准已经发展:
来自C++ 03:
如果发生错误,val不变; 否则将其设置为结果值.
从C++ 0x(嗯..从我有权访问的最后一个草稿):
要存储的数值可以是以下之一:
- 零,如果转换函数无法转换整个字段.
- 如果要转换为有符号整数类型的字段表示要在val中表示的过大的正(或负)值,则为最正(或负)可表示的值.
- 如果要转换为无符号整数类型的字段表示无法用val表示的值,则为最正可表示的值.
- 转换后的值,否则.
| 归档时间: |
|
| 查看次数: |
287 次 |
| 最近记录: |