std::basic_filebuf<CharT,Traits>::overflow
来自cppreference.com
< 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(c) 或在指示失败时返回 Traits::eof()。
[编辑] 注解
如果 a_codecvt.always_noconv() 会返回 true,那么可以跳过调用 a_codecvt.out()。
[编辑] 示例
本节未完成 原因:暂无示例 |
[编辑] 参阅
[虚] |
从放置区写入字符到关联的输出序列 ( std::basic_streambuf<CharT,Traits> 的虚受保护成员函数)
|
[虚] |
从关联文件读取 (虚受保护成员函数) |