Heim > Backend-Entwicklung > C++ > Hauptteil

Warum wird ein Stringstream durch Zurücksetzen mit „str(\'\')` nicht gelöscht?

DDD
Freigeben: 2024-11-04 03:04:30
Original
929 Leute haben es durchsucht

Why Doesn't Resetting a Stringstream with `str(

Löschen eines Stringstreams

Der folgende Code versucht, ein Stringstream-Objekt namens Parser zu löschen:

<code class="cpp">stringstream parser;

parser << 5;
short top = 0;
parser >> top;
parser.str(""); // HERE I'M RESETTING parser

parser << 6; // DOESN'T PUT 6 INTO parser
short bottom = 0;
parser >> bottom;</code>
Nach dem Login kopieren

Allerdings Dieser Ansatz funktioniert nicht wie erwartet. Lassen Sie uns erklären, warum.

Problem:

Das Problem liegt in der Art und Weise, wie Stringstreams mit Dateiende- (Eof) und Fehlerflags umgehen. Wenn die erste Extraktion (>> oben) das Ende der Zeichenfolge erreicht, wird das EOF-Bit gesetzt. Nachfolgende Vorgänge am Stream schlagen fehl, weil das Eof-Bit gesetzt bleibt.

Lösung:

Um einen Stringstream korrekt zu löschen, müssen sowohl die zugrunde liegende Sequenz als auch die Fail- und Eof-Flags vorhanden sein zurückgesetzt werden. Der folgende Code tut dies:

<code class="cpp">parser.str(std::string());
parser.clear();</code>
Nach dem Login kopieren

Die str()-Methode setzt die zugrunde liegende Sequenz auf einen leeren String, während die clear()-Methode die Fail- und Eof-Flags löscht.

Mit diesen Änderungen, liest der Code den Wert 6 korrekt in den Parser-Stream und speichert ihn in der unteren Variablen.

Das obige ist der detaillierte Inhalt vonWarum wird ein Stringstream durch Zurücksetzen mit „str(\'\')` nicht gelöscht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!