Heim >Backend-Entwicklung >C++ >Warum kann ich ein „stringstream'-Objekt nicht in C kopieren?

Warum kann ich ein „stringstream'-Objekt nicht in C kopieren?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-18 02:40:11723Durchsuche

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

Warum das Kopieren von Stringstream verboten ist

Das Kopieren von Stringstream-Objekten ist in C aufgrund der Privatisierung ihrer Kopierkonstruktoren nicht zulässig. Dies gilt für alle Stream-Typen, einschließlich stringstream, istream, ostream und iostream.

Streams sind keine bloßen Container, die dupliziert werden können. Sie dienen als Kanäle für den Datenfluss und verbinden eine Quelle mit einer Senke. Im Gegensatz zu Containern speichern Streams keine Daten, sondern erleichtern deren Übertragung.

Betrachten Sie die Analogie eines Streams zu einer Pipe, die Daten transportiert. Das Erstellen einer Kopie eines Streams wäre so, als würde man eine zusätzliche Pipe erstellen, die mit derselben Datenquelle verbunden ist. Da die Daten jedoch bereits vom ursprünglichen Stream verbraucht wurden, können von der Kopie keine neuen Daten empfangen werden.

Zur Veranschaulichung:

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

In diesem Beispiel wird versucht, dies zu tun Das Kopieren von s1 in s2 führt zu einem Fehler, da dadurch eine doppelte Verbindung zu einer Datenquelle erstellt würde, die bereits erschöpft ist.

Während das Kopieren von Streams verboten ist, ist das Erstellen von Verweisen auf sie ist weiterhin zulässig. Dadurch können mehrere Code-Entitäten auf dieselbe zugrunde liegende Datenquelle zugreifen, ohne dass eine Duplizierung erforderlich ist.

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

Zusätzlich ist es möglich, ein neues Stream-Objekt zu erstellen, das denselben zugrunde liegenden Puffer wie ein vorhandener Stream verwendet.

Das obige ist der detaillierte Inhalt vonWarum kann ich ein „stringstream'-Objekt nicht in C kopieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn