std::wstring_convert<Codecvt,Elem,Wide_alloc,Byte_alloc>:: wstring_convert
From cppreference.net
<
cpp
|
locale
|
wstring convert
|
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
是空指针,则行为未定义。
参数
| 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 | 默认构造函数为显式 | 改为隐式 |