ホームページ > バックエンド開発 > C++ > C 11 以降で抽出失敗時に「stringstream >>」がターゲット変数をゼロにするのはなぜですか?

C 11 以降で抽出失敗時に「stringstream >>」がターゲット変数をゼロにするのはなぜですか?

Mary-Kate Olsen
リリース: 2024-12-01 06:16:12
オリジナル
722 人が閲覧しました

Why Does `stringstream >>` C 11 以降で抽出失敗時にターゲット変数をゼロにしますか?
>` C 11 以降で抽出失敗時にターゲット変数をゼロにしますか? " />

なぜ stringstream >> 障害時にターゲットの値が変更されるのですか?

Stroustrup の「TC PL、第 3 版」から引用された一節で、著者は次のように述べています。ただし、stringstream >> の操作が行われると v がゼロになるため、この例はこのステートメントと矛盾します。

矛盾した動作の説明

この明らかな矛盾を理解する鍵は、C 11 の前後での抽出演算子の動作の違いにあります。

C 前11

C 11 より前では、>> 抽出が失敗した場合、v の値は変更されず、failbit フラグが設定されていました。

C 11 以降

C 11 では、 >> 更新された仕様に従って、抽出が失敗した場合は、v とフェイルビットに 0 が書き込まれます。フラグが設定されています。

std::numeric_limits::max() やオーバーフロー保護を備えた型の場合std::numeric_limits::min() が v に書き込まれ、フェイルビット フラグが設定されます。

  • 出力例の説明
提供された例では:

v の値は最初は123.

v にワードを読み取ろうとした後 (失敗)、v の値は 0 に設定されます。

    stringstream の rdstate() は、フェイルビットが設定されていることを示し、抽出に失敗しました。
  • この動作は、>> の更新された動作と一致しています。 C 11 で導入されました。

以上がC 11 以降で抽出失敗時に「stringstream >>」がターゲット変数をゼロにするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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