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

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-01 06:16:12734ブラウズ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。