Namespaces
Variants

std::wstring_convert<Codecvt,Elem,Wide_alloc,Byte_alloc>:: wstring_convert

From cppreference.net
wstring_convert ( ) : wstring_convert ( new Codecvt ) { }
(1)
explicit wstring_convert ( Codecvt * pcvt ) ;
(2)
wstring_convert ( Codecvt * pcvt, state_type state ) ;
(3)
explicit wstring_convert ( const byte_string & byte_err,
const wide_string & wide_err = wide_string ( ) ) ;
(4)
wstring_convert ( const std:: wstring_convert & ) = delete ;
(5) (自 C++14 起)
重载版本 数据成员
byte_err_string wide_err_string cvtptr cvtstate cvtcount
(1) 默认初始化 new Codecvt 默认初始化 未初始化
(2) pcvt
(3) state
(4) byte_err wide_err new Codecvt state_type ( )
2,3) pcvt 是空指针,则行为未定义。
5) 复制构造函数被删除, wstring_convert 不满足 CopyConstructible 要求。

参数

pcvt - 指向转换facet的指针
state - 转换移位状态的初始值
byte_err - 错误时显示的窄字符串
wide_err - 错误时显示的宽字符串

示例

#include <codecvt>
#include <locale>
#include <utility>
// 用于适配区域设置绑定facet的实用工具包装器,适用于wstring/wbuffer转换
template<class Facet>
struct deletable_facet : Facet
{
    using Facet::Facet; // 继承构造函数
    ~deletable_facet() {}
};
int main()
{
    // UTF-16le / UCS4 转换
    std::wstring_convert
        <std::codecvt_utf16<char32_t, 0x10ffff, std::little_endian>> u16to32;
    // 带自定义消息的UTF-8 / 宽字符串转换
    std::wstring_convert<std::codecvt_utf8<wchar_t>> u8towide("Error!", L"Error!");
    // GB18030 / 宽字符串转换facet
    using F = deletable_facet<std::codecvt_byname<wchar_t, char, std::mbstate_t>>;
    std::wstring_convert<F> gbtowide(new F("zh_CN.gb18030"));
}

缺陷报告

以下行为变更缺陷报告被追溯应用于先前发布的C++标准。

缺陷报告 应用于 发布时行为 正确行为
LWG 2175 C++11 pcvt 可能为空指针 此情况下行为未定义
LWG 2176 C++11 接受单个参数的构造函数为隐式 改为显式
P0935R0 C++11 默认构造函数为显式 改为隐式