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

来自cppreference.com
< cpp‎ | locale‎ | codecvt
 
 
本地化库
本地环境与平面
本地环境
平面类别基类
ctype(字符类别)平面
numeric(数值)平面
collate(对照比较)平面
time(时间)平面
monetary(货币)平面
messages(消息)平面
字符分类与转换
字符分类
转换
编码转换平面
(C++11)    
C 本地环境
 
 
在标头 <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 表示的编码依赖状态,并且 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++ 标准。

缺陷报告 应用于 出版时的行为 正确行为
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,例如在写入文件时
(虚受保护成员函数)