Namespaces
Variants

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

From cppreference.net
basic_istream & putback ( char_type ch ) ;
**Примечание:** В данном фрагменте HTML не содержится переводимого текста, так как весь контент находится внутри тегов ` `, которые содержат C++ код. Согласно инструкциям, код на C++ и HTML-теги не подлежат переводу.

Помещает символ ch обратно во входной поток, чтобы следующим извлекаемым символом был ch .

Сначала сбрасывает eofbit , затем ведёт себя как UnformattedInputFunction . После создания и проверки сторожевого объекта, если rdbuf() не является нулевым, вызывает rdbuf ( ) - > sputbackc ( ch ) , который вызывает rdbuf ( ) - > pbackfail ( ch ) , если ch не равен последнему извлечённому символу.

Если rdbuf() является нулевым указателем или если rdbuf - > sputbackc ( ch ) возвращает Traits :: eof ( ) , вызывается setstate ( badbit ) .

В любом случае, устанавливает счётчик gcount() в ноль.

Содержание

Параметры

ch - символ для помещения во входной поток

Возвращаемое значение

* this

Исключения

failure if an error occurred (the error state flag is not goodbit ) and exceptions() is set to throw for that state.

Если внутренняя операция выбрасывает исключение, оно перехватывается и badbit устанавливается. Если exceptions() установлен для badbit , исключение выбрасывается повторно.

Пример

Демонстрирует разницу между модифицирующим и немодифицирующим 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";
}

Вывод:

Yello, world
--
putback failed
--
Hello, world

Отчеты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применяется к Поведение в опубликованной версии Корректное поведение
LWG 2243 C++98 sputbackc() вызывалась без аргументов вызывается с ch

Смотрите также

возвращает один символ обратно во входную последовательность
(публичная функция-член std::basic_streambuf<CharT,Traits> )
отменяет извлечение символа
(публичная функция-член)
читает следующий символ без его извлечения
(публичная функция-член)