std::basic_istream<CharT,Traits>::putback
| basic_istream& putback( char_type ch ); |
||
Schiebt das Zeichen ch zurück in den Eingabestrom, sodass das nächste extrahierte Zeichen ch sein wird.
Zuerst wird eofbit gelöscht, dann verhält es sich wie eine UnformattedInputFunction. Nach der Konstruktion und Überprüfung des Sentry-Objekts wird, wenn rdbuf() nicht null ist, rdbuf()->sputbackc(ch) aufgerufen, was rdbuf()->pbackfail(ch) aufruft, wenn ch nicht mit dem zuletzt extrahierten Zeichen übereinstimmt.
Wenn rdbuf() null ist oder wenn rdbuf->sputbackc(ch) Traits::eof() zurückgibt, wird setstate(badbit) aufgerufen.
In jedem Fall wird der Zähler gcount() auf null gesetzt.
Inhalt |
[bearbeiten] Parameter
| ch | - | Zeichen, das in den Eingabestrom gelegt werden soll |
[bearbeiten] Rückgabewert
*this
[bearbeiten] Ausnahmen
Wenn eine interne Operation eine Ausnahme auslöst, wird diese abgefangen und badbit gesetzt. Wenn exceptions() für badbit gesetzt ist, wird die Ausnahme erneut ausgelöst.
[bearbeiten] Beispiel
Demonstriert den Unterschied zwischen modifizierendem und nicht modifizierendem putback().
#include <iostream> #include <sstream> int main() { std::stringstream s1("Hello, world"); // IO stream s1.get(); if (s1.putback('Y')) // modifies the buffer std::cout << s1.rdbuf() << '\n'; else std::cout << "putback failed\n"; std::cout << "--\n"; std::istringstream s2("Hello, world"); // input-only stream s2.get(); if (s2.putback('Y')) // cannot modify input-only buffer std::cout << s2.rdbuf() << '\n'; else std::cout << "putback failed\n"; s2.clear(); std::cout << "--\n"; if (s2.putback('H')) // non-modifying putback std::cout << s2.rdbuf() << '\n'; else std::cout << "putback failed\n"; }
Ausgabe
Yello, world -- putback failed -- Hello, world
[bearbeiten] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 2243 | C++98 | sputbackc() wurde ohne Argument aufgerufen |
aufgerufen mit ch |
[bearbeiten] Siehe auch
| legt ein Zeichen zurück in die Eingabesequenz (öffentliche Member-Funktion von std::basic_streambuf<CharT,Traits>) | |
| entfernt ein Zeichen aus dem Eingabestrom (public member function) | |
| liest das nächste Zeichen ohne es zu extrahieren (public member function) |