来自 Stroustrup 的《TC++PL》第3版,第21.3.3节:
如果我们尝试将一个变量 v 进行读取操作并且该操作失败,则变量 v 的值应保持不变(如果 v 是 istream 或 ostream 成员函数处理的类型之一,则它是不变的)。
以下示例似乎与上述引文相矛盾。根据上述引言,我期望 v 的值保持不变,但实际上它被清零了。这种表面上的矛盾行为的解释是什么?
#include <iostream>
#include <sstream>
int main( )
{
std::stringstream ss;
ss << "The quick brown fox.";
int v = 123;
std::cout << "Before: " << v << "\n";
if( ss >> v )
{
std::cout << "Strange -- was successful at reading a word into an int!\n";
}
std::cout << "After: " << v << "\n";
if( ss.rdstate() & std::stringstream::eofbit ) std::cout << "state: eofbit\n";
if( ss.rdstate() & std::stringstream::failbit ) std::cout << "state: failbit\n";
if( ss.rdstate() & std::stringstream::badbit ) std::cout << "state: badbit\n";
return 1;
}
我使用x86_64-w64-mingw32-g++.exe (rubenvb-4.7.2-release) 4.7.2得到的输出是:
Before: 123
After: 0
state: failbit
谢谢。
-Wall -Wextra -Werror -static -std=c++11
。 - user1823664