StroustrupのTC++PL、第3版、セクション21.3.3から:
変数vを読み込もうとして操作が失敗した場合、vの値は変更されません(vがistreamまたはostreamメンバー関数によって処理されるタイプの1つである場合は変更されません)。
次の例は、上記の引用と矛盾しているように見えます。上記の見積もりに基づいて、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
ありがとう。