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 |
См. также
| помещает один символ обратно во входную последовательность (открытая функция-член std::basic_streambuf<CharT,Traits>) |
|
| возвращает символ во входную последовательность (открытая функция-член) |
|
| читает следующий символ, не извлекая его (открытая функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/basic_istream/putback