如果输入类型与目标类型不同,“ cin”是否将变量重置为某个默认值?

时间:2018-08-16 06:59:19

标签: c++ cin

我对“ 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 结尾。

谢谢您能解释这种行为。

2 个答案:

答案 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):

  

如果提取失败,则将零写入值并设置故障位。