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

来自cppreference.com
 
 
 
 
 
wstring_convert() : wstring_convert( new Codecvt ) {}
(1)
explicit wstring_convert( Codecvt* pcvt );
(2)
wstring_convert( Codecvt* pcvt, state_type state );
(3)
 
(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 - 指向转换刻面的指针
state - 转换迁移状态的初始值
byte_err - 错误时显示的窄字符串
wide_err - 错误时显示的宽字符串

示例

#include <codecvt>
#include <locale>
#include <utility>
 
// 为 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 / 宽字符串转换平面
    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 默认构造函数是显式的 改成隐式的