根据Stroustrup的“Programming:Principles and Practice Using C ++(第2版)”,以下程序应输出对象'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
答案 0 :(得分:2)
我只是引用cppreference:
而不是找出C ++标准引用。直到C ++ 11
如果提取失败(例如,如果输入了预期数字的字母),则值保持不变,并设置failbit。
从C ++ 11开始
如果提取失败,则将零写入值并设置failbit。如果提取结果的值太大或太小而不适合值,则写入std :: numeric_limits :: max()或std :: numeric_limits :: min()并设置failbit标志。
所以大概是,你的书假设是预先c ++ 11语义,但是你的编译器使用的是post c ++ 11语义。
答案 1 :(得分:0)
根据我的知识,年龄是整数,如果我们为它分配字符或字符串,它将不会接受,然后它将被赋予0,这是整数的默认值。
答案 2 :(得分:-2)
附录:当前选择的&#34;解决方案&#34;是危险的不正确,告诉读者依靠真正的UB行为,匿名的downvoters像gnats一样涌向这个答案。这是SO。通过匿名投票确定与月球的距离。
iostreams不保证在发生错误时用于输入的变量将保持不变。
RE
“为什么不像Stroustrup那样-1?
他真的吗?
因为你没有提供引用,所以很难对此有所说明,但我更怀疑Stroustrup已经提出了这个要求。