所以这是一个非常基本的问题和超级微不足道的,但我只是通过编程原则&实践在c + +和我的程序阅读一个字符串和一个int是行为不同于Bjarne Stroustrup写的书,所以id很惊讶如果他犯了一个错误。反正这里的代码:cin在读取错误类型时覆盖我的初始化值?
#include "..\std_lib_facilities.h"
int main()
{
cout << "Please enter your first name and age\n";
string first_name = "???"; // string variable
// ("???” means “don’t know the name”)
int age = -1; // integer variable (1 means “don’t know the age”)
cin >> first_name >> age; // read a string followed by an integer
cout << "Hello, " << first_name << " (age " << age << ")\n";
}
当我输入“22·卡洛斯”成提示它输出终端“你好,22(0岁)”主要在做错误检查没用我的初始值。这是C++的一个新功能或什么,这就是为什么这本书是错的?
编辑1:在Windows 7上使用GCC for cygwin和-std = C++ 11触发器的BTW。
我觉得老(前C + +11)行为对于一般类型(非内置类型)是不现实的。如果读取失败,恢复旧值是没有效率的,我认为将读取对象置于有效状态(不一定是原始值)会使实现输入流代码的工作变得更容易。 – alfC