Heim > Artikel > Backend-Entwicklung > Warum wird ein Stringstream durch Zurücksetzen mit „str(\"\")` nicht gelöscht?
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!