我对“ cin”的行为有疑问(我不理解)。我的IDE是Windows OS(带有Cygwin)下的Netbeans。
这是一个代码示例:
const b = new B();
class A() {
constructor(b) {
this.b = b;
}
}
const a = new A(b);
如果我输入某种字符/字符串,此代码将显示消息 temp = 0 。就像int main()
{
int temp = -1;
std::cin >> temp; // here user enters string of characters (string) or a single character
if (temp == 0)
std::cout << "temp = " << temp << ".\n";
if (temp == -1)
std::cout << "temp = " << temp << ".\n";
return 0;
}
到char
的转换一样,转换总是以值 0 结尾。
谢谢您能解释这种行为。
答案 0 :(得分:18)
这是std::basic_istream::operator>>
的预期行为;由于C ++ 11如果提取失败,该变量将被设置为0。在C ++ 11之前,该变量将不会被修改,因此其原始值将保留。
如果提取失败(例如,如果输入的字母是数字, 预期),值将保持不变,并设置故障位。 (直到C ++ 11)
如果提取失败,则将零写入值并设置故障位。如果 提取导致该值太大或太小而无法容纳 值,std :: numeric_limits :: max()或std :: numeric_limits :: min() 写入并设置了故障位标志。 (自C ++ 11起)
答案 1 :(得分:4)
如果读取失败,operator>>
会将值设置为零(cppreference):
如果提取失败,则将零写入值并设置故障位。