1

input_stream >> i;whereiが算術型である、例外をスローする、または badbit を設定するなどの呼び出しを行った場合、i変更されていないことが保証されますか?

4

2 に答える 2

5

C++11 より前は、値はそのままでした[参照] :

抽出に失敗した場合 (たとえば、数字が必要な場所に文字が入力された場合)、valueは変更されずにfailbit設定されます。(C++11まで)

しかし、C++11 以降は違います。0抽出が失敗した場合に設定されます (同じ参照):

抽出に失敗した場合、ゼロが書き込まれvaluefailbit設定されます。抽出の結果、値が大きすぎたり小さすぎたりして値に収まらない場合、std::numeric_limits<T>::max()またはstd::numeric_limits<T>::min()書き込まれてfailbitフラグが設定された場合。(C++11以降)

于 2016-11-27T11:43:25.230 に答える
3

次の cppreference ドキュメントを参照してください。std::basic_istream::operator>> std::num_get::get, std::num_get::do_get

1-4) FormattedInputFunction として動作します。先頭の空白をスキップする可能性のあるセントリー オブジェクトを構築してチェックした後、std::num_get::get() を呼び出して整数値を抽出します。

その後

ステージ 3: 変換と保存:
[...]
- 変換関数がフィールド全体の変換に失敗した場合、値 0 が v に保存されます

于 2016-11-27T11:42:10.197 に答える