Namensräume
Varianten
Aktionen

std::basic_streambuf<CharT,Traits>::sungetc

Von cppreference.com
< cpp‎ | io‎ | basic streambuf
 
 
 
 
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) [bearbeiten]
entfernt ein Zeichen aus dem Eingabestrom
(public member function of std::basic_istream<CharT,Traits>) [edit]