Namespaces
Variants

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

From cppreference.net
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 (表示 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) 建立一个 可观测检查点
(since C++26)

目录

参数

ch - 要存储到放置区域的字符

返回值

Traits :: not_eof ( ch ) 表示成功,或 Traits :: eof ( ) 表示失败。

注释

如果 a_codecvt. always_noconv ( ) 返回 true ,则对 a_codecvt. out ( ) 的调用可以被跳过。

示例

参见

[virtual]
将字符从输出区写入到关联的输出序列
( std::basic_streambuf<CharT,Traits> 的虚保护成员函数)
[virtual]
从关联文件读取数据
(虚保护成员函数)