std::basic_streambuf<CharT,Traits>:: sputbackc
|
int_type sputbackc
(
char_type c
)
;
|
||
Возвращает символ обратно в область получения.
Если позиция возврата доступна в области получения (
gptr
(
)
>
eback
(
)
), и символ
c
равен символу на одну позицию левее
gptr()
(как определено
Traits
::
eq
(
c, gptr
(
)
[
-
1
]
)
), тогда просто уменьшает следующий указатель (
gptr()
).
В противном случае, вызывает pbackfail ( Traits :: to_int_type ( c ) ) для либо отката области чтения, либо изменения как области чтения, так и, возможно, связанной символьной последовательности.
Функция потока ввода-вывода basic_istream::putback реализована с использованием этой функции.
Содержание |
Параметры
| c | - | символ для возврата |
Возвращаемое значение
Если позиция возврата была доступна, возвращает символ, на который теперь указывает следующий указатель, преобразованный в
int_type
с помощью
Traits
::
to_int_type
(
*
gptr
(
)
)
. Следующий однобайтовый ввод из этого буфера потока вернёт этот символ.
Если позиция возврата была недоступна, возвращает то, что pbackfail() возвращает, то есть Traits :: eof ( ) при неудаче.
Пример
#include <iostream> #include <sstream> int main() { std::stringstream s("abcdef"); // gptr() указывает на 'a' в "abcdef" std::cout << "Before putback, string holds " << s.str() << '\n'; char c1 = s.get(); // c1 = 'a', gptr() теперь указывает на 'b' в "abcdef" char c2 = s.rdbuf()->sputbackc('z'); // эквивалентно s.putback('z') // gptr() теперь указывает на 'z' в "zbcdef" std::cout << "After putback, string holds " << s.str() << '\n'; char c3 = s.get(); // c3 = 'z', gptr() теперь указывает на 'b' в "zbcdef" char c4 = s.get(); // c4 = 'b', gptr() теперь указывает на 'c' в "zbcdef" std::cout << c1 << c2 << c3 << c4 << '\n'; s.rdbuf()->sputbackc('b'); // gptr() теперь указывает на 'b' в "zbcdef" s.rdbuf()->sputbackc('z'); // gptr() теперь указывает на 'z' в "zbcdef" int eof = s.rdbuf()->sputbackc('x'); // нечего откатывать: pbackfail() завершается неудачей if (eof == EOF) std::cout << "No room to putback after 'z'\n"; }
Вывод:
Before putback, string holds abcdef After putback, string holds zbcdef azzb No room to putback after 'z'
Смотрите также
|
перемещает указатель следующего символа во входной последовательности на одну позицию назад
(публичная функция-член) |
|
|
помещает символ во входной поток
(публичная функция-член
std::basic_istream<CharT,Traits>
)
|