std::basic_streambuf<CharT,Traits>::sungetc
| int_type sungetc(); |
||
Wenn eine Zurückstellposition im Lese-Bereich verfügbar ist (gptr() > eback()), dann wird der nächste Zeiger dekrementiert (gptr()) und das Zeichen, auf das er jetzt zeigt, zurückgegeben.
Wenn keine Zurückstellposition verfügbar ist, wird pbackfail() aufgerufen, um die Eingabesequenz, wenn möglich, zurückzusetzen.
Die I/O-Stream-Funktion basic_istream::unget wird in Bezug auf diese Funktion implementiert.
Inhalt |
[edit] Parameter
(keine)
[edit] Rückgabewert
Wenn eine Zurückstellposition verfügbar war, wird das Zeichen zurückgegeben, auf das der nächste Zeiger nun zeigt, konvertiert in int_type mit Traits::to_int_type(*gptr()). Die nächste Einzelzeichen-Eingabe von diesem Streambuf gibt dieses Zeichen zurück.
Wenn keine Zurückstellposition verfügbar war, wird zurückgegeben, was pbackfail() zurückgibt, was im Fehlerfall Traits::eof() ist.
[edit] Beispiel
#include <iostream> #include <sstream> int main() { std::stringstream s("abcdef"); // gptr() points to 'a' char c1 = s.get(); // c = 'a', gptr() now points to 'b' char c2 = s.rdbuf()->sungetc(); // same as s.unget(): gptr() points to 'a' again char c3 = s.get(); // c3 = 'a', gptr() now points to 'b' char c4 = s.get(); // c4 = 'b', gptr() now points to 'c' std::cout << c1 << c2 << c3 << c4 << '\n'; s.rdbuf()->sungetc(); // back to 'b' s.rdbuf()->sungetc(); // back to 'a' int eof = s.rdbuf()->sungetc(); // nothing to unget: pbackfail() fails if (eof == EOF) std::cout << "Nothing to unget after 'a'\n"; }
Ausgabe
aaab Nothing to unget after 'a'
[edit] Siehe auch
| legt ein Zeichen zurück in die Eingabesequenz (öffentliche Memberfunktion) | |
| entfernt ein Zeichen aus dem Eingabestrom (public member function of std::basic_istream<CharT,Traits>) |