ホームページ > バックエンド開発 > C++ > std::setw() と Stringstreams: スティッキー マニピュレーターと非スティッキー マニピュレーター — 違いは何ですか?

std::setw() と Stringstreams: スティッキー マニピュレーターと非スティッキー マニピュレーター — 違いは何ですか?

Linda Hamilton
リリース: 2024-12-11 12:37:11
オリジナル
821 人が閲覧しました

std::setw() and Stringstreams: Sticky vs. Non-Sticky Manipulators—What's the Difference?

マニピュレータとフォーマット オブジェクト

stringstream を構築しようとすると、std::setw() の動作に関してよくある誤解が生じます。 。 stringstream は挿入のたびにリセットされるため、stringstream に永続的に影響を与えると想定するのは誤った想定でした。この記事は、スティッキー マニピュレーターと非スティッキー マニピュレーターおよびフォーマット オブジェクトの区別を明確にし、次の質問に対処することを目的としています:

  • std::setw() はなぜこのように動作するのですか?
  • 同様のマニピュレーターは他にもありますか動作?
  • std::ios_base::width() と std::setw() は動作に関してどのように異なりますか?
  • この動作に関する明確な文書はどこにありますかonline?

スティッキー マニピュレータ

std::ios_base 内のマニピュレータは 2 つのカテゴリに分類できます:

  • オブジェクトを返すマニピュレータ: これらマニピュレータはストリーム オブジェクトに直接影響を与えないため、「スティッキー性」を示しません。これには、setw.
  • ストリームを返すマニピュレータ: これらのマニピュレータは、ストリーム オブジェクトに直接影響を与えるため、「スティッキー」です。つまり、マニピュレータによる変更は、別のマニピュレータによって明示的に変更されるまで持続します。例には、setiosflags および setfill が含まれます。

フォーマット オブジェクト

フォーマット オブジェクトは、ストリームのフォーマット プロパティを一時的に変更するために使用されます。マニピュレータとは対照的に、マニピュレータはストリーム オブジェクトに直接影響しません。この例としては、PutSquareBracket 書式オブジェクトが挙げられます。これにより、永続的な状態に影響を与えることなく書式設定を一時的に変更できます。

結論

std::setw() はユニークです。マニピュレーターの中で唯一非粘着性です。その特定の動作に関する文書が不足しているのは、他のマニピュレーターとの認識された類似性に起因する可能性があります。ただし、実際には、フォーマットされた出力操作では幅を明示的にゼロに設定する必要があるため、動作が異なります。

以上がstd::setw() と Stringstreams: スティッキー マニピュレーターと非スティッキー マニピュレーター — 違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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