为什么从流中读取无效输入时,会把一个整数设为0,而不是保留它原本的值?
我在用《Programming: Principles and Practice Using C++》这本书来学习编程。
在第二章中,有这样一个简单的例子:
#include <iostream>
using namespace std;
int main() {
cout << "Please enter your first name and age\n";
string first_name = "???";
int age = -1;
cin >> first_name >> age;
cout << "Hello, " << first_name << "(age" << age << ")\n";
}
书里说:如果输入错误——把年龄放在名字之前——那么 age 的值在提取时应该保持为 -1,但我得到的是 0。
为什么会这样?我用过GCC和 Clang,结果都是一样的。
解决方案
你得到 0,这是因为你的编译器实现了对 [LWG696] 的处理。
根据C++98标准,提取失败时,value 应该保持不变。这个被认为是一个缺陷,正确的做法是在你的情况下把它设为零。既然被认为是缺陷,现代编译器甚至在C++98模式下也会把它设为零。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。
相关文章
Copyright © 超人AI导航
辽ICP备2024029316号-4