Spec-Zone.ru › C++

std::basic_streambuf<CharT,Traits>::pbackfail

protected:
virtual int_type pbackfail( int_type c = Traits::eof() );

Эта функция может быть вызвана только в случае, если выполняется хотя бы одно из следующих условий:

  • gptr() равен null,
  • gptr() == eback(), или
  • traits::eq(traits::to_char_type(c), gptr()[-1]) возвращает false.

Эта функция вызывается общедоступными функциями sungetc() и sputbackc() (которые, в свою очередь, вызываются basic_istream::unget и basic_istream::putback) в следующих случаях:

1) В области получения нет позиции для возврата (pbackfail() вызывается без аргументов). В этом случае цель pbackfail() — отступить на одну позицию назад в области получения, если это разрешено связанной последовательностью символов (например, поток с буфером, связанным с файлом, может перезагрузить буфер из файла, начав с позиции на один символ раньше).
2) Вызывающая сторона пытается вернуть другой символ, чем тот, который был получен ранее (pbackfail() вызывается с символом, который нужно вернуть). В этом случае цель pbackfail() — поместить символ c в область получения в позиции, предшествующей basic_streambuf::gptr(), и, при возможности, изменить связанную последовательность символов, чтобы отразить это изменение. Это может включать откат области получения, как в первом варианте.

Базовая версия этой функции в базовом классе ничего не делает и возвращает Traits::eof() во всех ситуациях. Эта функция переопределяется производными классами: basic_stringbuf::pbackfail, basic_filebuf::pbackfail, strstreambuf::pbackfail, и ожидается, что она будет переопределена в пользовательских и сторонних библиотечных классах потоков.

Параметры

ch - возвращаемый символ или Traits::eof() если требуется только откат

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

Traits::eof() в случае неудачи, какое-то другое значение для указания успеха. Базовая версия всегда возвращает значение неудачи.

Пример

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

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

DR Применяется к Поведение, как опубликовано Корректное поведение
LWG 32 C++98 условие вызова 'traits::eq(*gptr(),traits::to_char_type(c))
возвращает false' не соответствовало описанию sputbackc()
исправлено для соответствия
описанию

См. также

pbackfail
[virtual]
откатывает последовательность ввода для возвращения символа, не влияя на связанный файл
(виртуальная защищённая функция члена класса std::basic_filebuf<CharT,Traits>)
pbackfail
[virtual]
возвращает символ в последовательность ввода
(виртуальная защищённая функция члена класса std::basic_stringbuf<CharT,Traits,Allocator>)
pbackfail
[virtual]
откатывает последовательность ввода для возвращения символа
(виртуальная защищённая функция члена класса std::strstreambuf)
sungetc
сдвигает указатель следующего символа в последовательности ввода назад на один
(общедоступная функция-член)
sputbackc
возвращает один символ в последовательность ввода
(общедоступная функция-член)

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

Spec-Zone.ru

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