1

根据 Stroustrup 的“Programming: Principles and Practice Using C++ (2nd Edition)”,下面的程序应该为对象 'age' 输出 -1 的值。

#include <iostream>
using namespace std;

int main()
{
  int age = -1;
  cin >> age;

  cout << "\nAge:" << age;
}

INPUT: Carlos // string
OUTPUT: 0 // Why not -1 as Stroustrup states ?

C++ Standard: C++ 4.8.1
4

3 回答 3

2

我不会寻找 C++ 标准参考,而是引用cppreference

直到 C++11

如果提取失败(例如,如果在需要数字的地方输入了一个字母),则值保持不变并设置失败位。

自 C++11 起

如果提取失败,则将零写入 value 并设置 failbit。如果提取导致值太大或太小而无法容纳在值中,则写入 std::numeric_limits::max() 或 std::numeric_limits::min() 并设置故障位标志。

所以大概,你的书假设 pre c++11 语义,但你的编译器使用 post c++11 语义。

于 2014-07-14T02:04:20.660 回答
0

据我所知,年龄是整数,如果我们将其分配为字符或字符串,它将不接受,然后将其分配为 0,这是整数的默认值。

于 2014-07-14T02:05:54.350 回答
-2

附录:当前选择的“解决方案”是危险的不正确,告诉读者依赖真正的 UB 行为,并且匿名的反对者像蚊子一样蜂拥而至这个答案。就是这样。通过匿名投票确定到月球的距离。


iostreams 不保证用于输入的变量在发生错误时将保持不变。

回覆

为什么不像 Stroustrup 所说的那样 -1 呢?

他真的吗?

由于您没有提供报价,因此很难对此做出任何明确的决定,但我相当怀疑 Stroustrup 是否提出了这一主张。

于 2014-07-14T02:06:24.280 回答