std::codecvt<InternT,ExternT,StateT>::unshift, do_unshift
来自 cppreference.com
定义于头文件 <locale> |
||
public: result unshift( StateT& state, ExternT* to, ExternT* to_end, |
(1) | |
protected: virtual result do_unshift( StateT& state, ExternT* to, ExternT* to_end, |
(2) | |
1) 公共成员函数,调用最底层派生类的成员函数
do_unshift
。2) 如果此
codecvt
分面表示的编码是状态相关的,并且 state 表示的转换状态不是初始移位状态,则写入返回初始移位状态所需的字符。这些字符将写入一个字符数组,其第一个元素由 to 指向。写入的字符不超过 to_end - to 个。参数 to_next 将更新为指向写入的最后一个字符之后的下一个字符。目录 |
[编辑] 返回值
一个 std::codecvt_base::result 类型的值,指示成功状态如下
ok
|
所有必要的字符都已写入。state 现在表示初始移位状态 |
partial
|
输出缓冲区中没有足够的空间。to_next == to_end |
error
|
发生了未指定的错误 |
noconv
|
编码不是状态相关的,不需要终止序列 |
[编辑] 注意
此函数由 std::basic_filebuf::close() 和在其他需要结束状态相关的多字节字符序列的情况下调用。
[编辑] 示例
本节尚未完善 原因:无示例 |
[编辑] 缺陷报告
以下行为改变缺陷报告已追溯应用于先前发布的 C++ 标准。
DR | 应用于 | 已发布的行为 | 正确行为 |
---|---|---|---|
LWG 305 | C++98 | std::codecvt<wchar_t, char, std::mbstate_t>::do_unshift 被要求不要写任何字符 |
不需要 |
LWG 380 | C++98 | 返回 partial 的含义是“需要更多字符来 完成终止”,但没有提供任何字符 |
更正为指示 缓冲区空间不足 |
LWG 381 | C++98 | state 不要求有效,并且 如果 state 无效,则返回 error |
state 必须有效,并且 返回 error 表示出现错误 |
LWG 664 | C++98 | std::codecvt<char, char, std::mbstate_t>::do_unshift 被要求不要写任何字符 |
不需要 |
LWG 665 | C++98 | std::codecvt<char, char, std::mbstate_t>::do_unshift 被要求返回 noconv |
不需要 |
[编辑] 参见
在给定状态的情况下,将宽字符转换为其多字节表示形式 (函数) | |
[虚拟] |
将字符串从 InternT 转换为 ExternT ,例如写入文件时(虚拟受保护成员函数) |