Spec-Zone.ru › C++

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

basic_istream& putback( char_type ch );

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

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

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

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

Параметры

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

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

*this

Исключения

failure, если произошла ошибка (флаг состояния ошибки не равен goodbit) и для этого состояния в exceptions() задан режим генерации исключения.

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

Пример

Демонстрируется различие между изменяющим и не изменяющим 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 1328
(N3168)
C++98 putback не очищает eofbit сначала очищает eofbit, прежде чем выполнять какие-либо действия
LWG 2243 C++98 sputbackc() вызывался без аргументов вызывается с ch

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/basic_istream/putback

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API