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 cvtptrcvtstate cvtcount 
(1)默认初始化 new Codecvt 默认初始化未初始化
(2)pcvt
(3)state
(4)byte_errwide_errnew 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 2175C++11pcvt 可以是空指针此时行为未定义
LWG 2176C++11构造函数是隐式的改成显式的
P0935R0C++11默认构造函数是显式的改成隐式的