ホームページ >バックエンド開発 >C++ >C で「stringstream」オブジェクトをコピーできないのはなぜですか?

C で「stringstream」オブジェクトをコピーできないのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-18 02:40:11726ブラウズ

Why Can't I Copy a `stringstream` Object in C  ?

Stringstream のコピーが禁止されている理由

コピー コンストラクターのプライベート化のため、C では stringstream オブジェクトのコピーが許可されていません。これは、stringstream、istream、ostream、iostream を含むすべてのストリーム タイプに適用されます。

ストリームは、複製できる単なるコンテナではありません。これらは、データが流れる導管として機能し、ソースとシンクを接続します。コンテナとは異なり、ストリームはデータを保持するのではなく、その送信を容易にします。

ストリームをデータを転送するパイプに例えて考えてみましょう。ストリームのコピーを作成することは、同じデータ ソースに接続された追加のパイプを作成することに似ています。ただし、データは元のストリームによってすでに消費されているため、コピーによって受信される新しいデータはありません。

説明するには:

int main() {
   std::stringstream s1("This is my string.");
   std::stringstream s2 = s1; // error, copying not allowed
}

この例では、 s1 を s2 にコピーすると、すでに使い尽くされたデータ ソースへの重複した接続が作成されるため、エラーが発生します。

ストリームのコピーは禁止されていますが、参照の作成は禁止されています。彼らにとってはまだ許されることだ。これにより、複数のコード エンティティが、重複することなく、同じ基礎となるデータ ソースにアクセスできるようになります。

std::istream  copy_cin = std::cin; //error
std::istream & ref_cin = std::cin; //ok

さらに、既存のストリームと同じ基礎となるバッファを使用する新しいストリーム オブジェクトを作成することも可能です。

以上がC で「stringstream」オブジェクトをコピーできないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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