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() может быть пропущен.
Пример
См. также
|
[виртуальная] | записывает символы из области вывода в связанную выходную последовательность (виртуальная защищённая функция-член класса 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_filebuf/overflow