为已定义的变量传递错误的类型输入
Passing incorrect type input for a defined variable
根据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是否做出了这种说法。
相关文章:
- 我的模板类方法返回错误类型?
- 错误:类型"double()"和"double()"的操作数无效到二进制&quo
- 类型为 "int*" 的参数与 C++ 中错误类型"int**"参数不兼容
- glDrawElements GL 错误类型 = 0x824c,严重性 = 0x9146,消息 = GL_INVALID
- Eclipse/CDT_C++给出"语义错误_"类型XXX无法解决"。项目运行
- turbo 为什么我的C++代码中出现错误类型名称预期"错误?
- "auto"推断出 hashtable_policy.h 中的错误类型
- 设计自己的结果/两者之一:是否应该始终指定成功类型和错误类型
- 如何修复"ctypes"。参数错误:参数 2:<键入"异常.类型错误">:RaspberryPi 中的错误类型"错误
- 在 vscode 上编译错误.类型说明符是 C++11 扩展
- 不允许使用错误类型
- 当读取错误类型时,CIN覆盖我的初始化值
- C++:"错误:类型'const char*'和'const char [28]'的操作数无效到二进制'ope
- 我的代码错误类型警告 1 警告 C4018 和更多错误
- 在shared_from_this()中的错误类型(在继承类中)(是否有dyn.type-ware shared Poi
- 为什么缩小转换范围不能防止错误类型的map.insert()失败
- 程序总是返回二进制'>>':找不到运算符,它采用错误类型的左操作数
- 错误:类型为 '.&' 来自类型的临时 '..*康斯特'
- 涉及将要馈送的向量转换为execvp的错误类型
- C++中是否存在错误类型