Namensräume
Varianten
Aktionen

std::basic_istream<CharT,Traits>::putback

Von cppreference.com
< cpp‎ | io‎ | basic istream
 
 
 
 
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

failure, wenn ein Fehler aufgetreten ist (der Fehlerstatus-Flag ist nicht goodbit) und exceptions() für diesen Zustand zum Werfen gesetzt ist.

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>) [bearbeiten]
entfernt ein Zeichen aus dem Eingabestrom
(public member function) [bearbeiten]
liest das nächste Zeichen ohne es zu extrahieren
(public member function) [bearbeiten]