Heim  >  Artikel  >  Backend-Entwicklung  >  Warum wird ein Stringstream durch Zurücksetzen mit „str(\"\")` nicht gelöscht?

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

DDD
DDDOriginal
2024-11-04 03:04:30932Durchsuche

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>

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>

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!

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