命名空间
变体
操作

std::codecvt<InternT,ExternT,StateT>::unshift, do_unshift

来自 cppreference.cn
< cpp‎ | locale‎ | codecvt
 
 
 
 
 
定义于头文件 <locale>
public:

result unshift( StateT& state, ExternT* to, ExternT* to_end,

                ExternT*& to_next ) const;
(1)
protected:

virtual result do_unshift( StateT& state, ExternT* to, ExternT* to_end,

                           ExternT*& to_next ) const;
(2)
1) 公有成员函数,调用最派生类的成员函数 do_unshift
2) 如果由此 codecvt facet 表示的编码是状态相关的,且 state 表示的转换状态不是初始移位状态,则写入返回到初始移位状态所需的字符。字符被写入到字符数组,该数组的首元素由 to 指向。写入的字符不超过 to_end - to 个。参数 to_next 被更新为指向写入的最后一个字符之后的位置。

目录

[edit] 返回值

类型为 std::codecvt_base::result 的值,指示成功状态如下

ok 所有必要的字符都已写入。state 现在表示初始移位状态
partial 输出缓冲区中空间不足。to_next == to_end
error 发生了未指定的错误
noconv 编码不是状态相关的,不需要终止序列

[edit] 注解

此函数由 std::basic_filebuf::close() 以及在完成状态相关的多字节字符序列的其他情况下调用。

[edit] 示例

[edit] 缺陷报告

以下行为变更缺陷报告被追溯应用于先前发布的 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
不要求

[edit] 参见

将宽字符转换为其多字节表示形式,给定状态
(函数) [edit]
[虚拟]
将字符串从 InternT 转换为 ExternT,例如在写入文件时
(虚拟保护成员函数) [edit]