ホームページ > バックエンド開発 > C++ > 抽出失敗時に「stringstream >>」が変数の値を変更するのはなぜですか?

抽出失敗時に「stringstream >>」が変数の値を変更するのはなぜですか?

Barbara Streisand
リリース: 2024-11-27 05:02:21
オリジナル
441 人が閲覧しました

Why Does `stringstream >>` 抽出失敗時に変数の値を変更しますか?
>` 抽出失敗時に変数の値を変更しますか? " />

障害時の値変更に関する 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート