命名空间
变体
操作

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

来自 cppreference.cn
< cpp‎ | io‎ | basic filebuf
 
 
 
 
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 [xbufxbuf_end) 中的字符输出到文件,如果输出失败则失败。此时,如果 pbase() != pptr()pbase() == end 均为 true(这意味着 xbuf 甚至不足以容纳一个外部字符),则增加 XSIZE 并从头开始重复。
std::codecvt_base::partial 将转换后的外部字符 [xbufxbuf_end) 输出到文件,并使用剩余的未转换内部字符 [endpptr()) 重复。如果输出失败,则失败(不重复)。
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> 的虚保护成员函数) [编辑]
[虚函数]
从关联的文件读取
(虚保护成员函数) [编辑]