为已定义的变量传递错误的类型输入

Passing incorrect type input for a defined variable

本文关键字:错误 类型 输入 变量 定义      更新时间:2023-10-16

根据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

我将直接引用cppreference:

,而不是查找c++标准引用。

到c++ 11日

如果提取失败(例如,如果在需要输入数字的地方输入了字母),则不修改值并设置failbit。

c++ 11以来

如果提取失败,则将0写入value并设置failbit。如果提取结果值太大或太小而无法装入值,则写入std::numeric_limits::max()或std::numeric_limits::min()并设置failbit标志。

所以,你的书假设是前c++11语义,但你的编译器使用后c++11语义

根据我的知识age是整数,如果我们给它分配字符或字符串,它将不接受,然后它将被分配0,这是默认的整数

附录:当前选择的"解决方案"是危险的不正确的,它告诉读者依赖于真正的UB行为,匿名的反对者像虱子一样涌向这个答案。这是真的。通过匿名投票确定到月球的距离。


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

re

为什么不按照Stroustrup的状态-1呢?

他真的吗?

由于您没有提供引用,因此很难对此做出任何明确的评论,但我相当怀疑Stroustrup是否做出了这种说法。