Spec-Zone.ru › C++

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

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

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

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

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

Spec-Zone.ru

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