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 | 将 [ 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() 的调用。
[编辑] 示例
本节不完整 原因:无示例 |
[编辑] 参阅
[virtual] |
从放置区向关联输出序列写入字符 ( std::basic_streambuf<CharT,Traits> 的虚保护成员函数) |
[virtual] |
从关联文件读取 (虚保护成员函数) |