引用元: cppreference
C++11 まで:
抽出に失敗した場合 (たとえば、数字が必要な場所に文字が入力された場合)、値は変更されず、failbit が設定されます。
C++11 以降:
抽出に失敗した場合、値にゼロが書き込まれ、failbit が設定されます。抽出の結果、値が大きすぎたり小さすぎたりして値に収まらない場合、
std::numeric_limits<T>::max()
またはstd::numeric_limits<T>::min()
書き込まれ、failbit フラグが設定された場合。
この変更により、これは次のスニペットを意味します。
int x = 1;
std::cin >> x;
return x;
数値変換が失敗した場合、1
C++11 より前に戻り0
ます。
標準化委員会は、なぜこのような微妙な重大な変更を導入するのでしょうか? というか、この変更を保証する C++11 より前のコードはどのようなものでしたか?