Spec-Zone.ru › C++

std::basic_filebuf<CharT,Traits>::overflow

protected:
virtual int_type overflow( int_type ch = Traits::eof() );

Записывает данные из области вывода в связанную последовательность символов (в файл).

Ведёт себя так же, как версия базового класса std::basic_streambuf::overflow(), за исключением того, что поведение при «потреблении символов» определяется следующим образом:

1) Сначала использует std::codecvt::out внедрённой локали для преобразования символов во внешнее (возможно, многобайтовое) представление, сохраняемое во временном буфере, следующим образом: (XSIZE — некоторый неопределённый размер буфера)
const std::codecvt<CharT, char, typename Traits::state_type>& a_codecvt =
    std::use_facet<std::codecvt<CharT, char, typename Traits::state_type>>(getloc());
typename Traits::state_type state;
CharT* end;
char xbuf[XSIZE];
char* xbuf_end;
std::codecvt_base::result r =
    a_codecvt.out(state, pbase(), pptr(), end, xbuf, xbuf + XSIZE, xbuf_end);
2) Затем записывает в файл все полностью преобразованные символы из буфера. Формально выполняет следующие действия в зависимости от значения r:
r Операция
std::codecvt_base::ok Выводит символы из [xbuf, xbuf_end) в файл и завершается с ошибкой, если вывод не удался. Если на этом этапе pbase() != pptr() и pbase() == end оба равны true (это означает, что xbuf недостаточно даже для одного внешнего символа), увеличивает XSIZE и повторяет действия с самого начала.
std::codecvt_base::partial Выводит преобразованные внешние символы из [xbuf, xbuf_end) в файл и повторяет действия, используя оставшиеся непреобразованные внутренние символы из [end, pptr()). Если вывод не удался, завершается с ошибкой (без повторения).
std::codecvt_base::noconv Выводит символы из [pbase(), pptr()) в файл.
std::codecvt_base::error Завершается с ошибкой.
Если связанный файл не открыт (is_open() возвращает false), вывод всегда завершается с ошибкой.
3) Устанавливает наблюдаемую контрольную точку. (начиная с C++26)

Параметры

ch - символ, который нужно сохранить в области вывода

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

Traits::not_eof(ch) для обозначения успеха или Traits::eof() для обозначения ошибки.

Примечания

Если a_codecvt.always_noconv() возвращает true, вызов a_codecvt.out() может быть пропущен.

Пример

См. также

overflow
[виртуальная]
записывает символы из области вывода в связанную выходную последовательность
(виртуальная защищённая функция-член класса std::basic_streambuf<CharT,Traits>)
underflow
[виртуальная]
читает из связанного файла
(виртуальная защищённая функция-член)

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

Spec-Zone.ru

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