Bat*_*eba 5

您的代码行为未定义,包括C++ 03.流停在了..从C++ 11开始b设置为0; 在此之前它没有被修改.目前你在失败案例中读取了它的值,这是粗心的.

一个好的解决方法是总是写出类似的东西

if (cin >> a >> b){
    // yes, all good
} else {
    // a parsing error occurred
}
Run Code Online (Sandbox Code Playgroud)

true分支上,保证值已写入ab.

  • afaik [因为c ++ 11零写入变量,如果操作失败则设置failbit](http://en.cppreference.com/w/cpp/io/basic_istream/operator_gtgt),即它不是UB (3认同)