Spec-Zone.ru › C++

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

basic_istream& unget();

Снова делает доступным последний извлечённый символ.

Сначала очищает eofbit, затем ведёт себя как функция неформатированного ввода. После создания и проверки объекта sentry, если установлены какие-либо флаги ios_base::iostate, функция устанавливает failbit и возвращает управление. В противном случае вызывает rdbuf()->sungetc().

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

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

Параметры

(нет)

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

*this

Исключения

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

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

Пример

#include <iostream>
#include <sstream>

int main()
{
    std::istringstream s1("Hello, world.");
    char c1 = s1.get();
    if (s1.unget())
    {
        char c2 = s1.get();
        std::cout << "Got: '" << c1 << "'. Got again: '" << c2 << "'.\n";
    }
}

Вывод:

Got: 'H'. Got again: 'H'.

Отчёты об ошибках

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

DR Применяется к Опубликованное поведение Правильное поведение
LWG 1328
(N3168)
C++98 unget не очищает eofbit сначала очищает eofbit

См. также

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

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

Spec-Zone.ru

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