>` 抽出失敗時に変数の値を変更しますか? " />
障害時の値変更に関する Stringstream >> の一貫性のない動作
TC PL、第 3 版、セクション 21.3.3 で Stroustrup が述べているように、読み取り操作が失敗しても変数の値は変更されないはずですが、stringstream を使用する場合には特有の動作が発生します。 >> が一致しないデータ型です。
提示されたコード スニペットでは、整数変数 v は 123 で初期化されます。stringstream >> を使用して単語をこの整数に読み取ろうとすると、 v の値は、元の値の保存が期待されているにもかかわらず、ゼロになります。
この明らかな矛盾は、C 11 での明確化によって解決されます。以前は、抽出が失敗すると、値は変更されず、フェイルビットが設定されましたが、C 11 では、変数にゼロが書き込まれ、フェイルビットは設定されたままになります。
この変更された動作は、std::scanf スタイルの入力解析から C 11 の std::strtoll および同様の関数の使用への変更にあります。これらの関数は数値変換を異なる方法で処理し、その結果、抽出失敗時の v の変更。
以上が抽出失敗時に「stringstream >>」が変数の値を変更するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。