input_stream >> i;
wherei
が算術型である、例外をスローする、または badbit を設定するなどの呼び出しを行った場合、i
変更されていないことが保証されますか?
2 に答える
C++11 より前は、値はそのままでした[参照] :
抽出に失敗した場合 (たとえば、数字が必要な場所に文字が入力された場合)、
value
は変更されずにfailbit
設定されます。(C++11まで)
しかし、C++11 以降は違います。0
抽出が失敗した場合に設定されます (同じ参照):
抽出に失敗した場合、ゼロが書き込まれ
value
、failbit
設定されます。抽出の結果、値が大きすぎたり小さすぎたりして値に収まらない場合、std::numeric_limits<T>::max()
またはstd::numeric_limits<T>::min()
書き込まれてfailbit
フラグが設定された場合。(C++11以降)
次の cppreference ドキュメントを参照してください。std::basic_istream::operator>>
std::num_get::get, std::num_get::do_get
1-4) FormattedInputFunction として動作します。先頭の空白をスキップする可能性のあるセントリー オブジェクトを構築してチェックした後、std::num_get::get() を呼び出して整数値を抽出します。
その後
ステージ 3: 変換と保存:
[...]
- 変換関数がフィールド全体の変換に失敗した場合、値 0 が v に保存されます