# std::wstring_convert

< cpp‎ | locale

定义于头文件 `<locale>` |  |
template< class Codecvt, class Elem = wchar_t, class Wide_alloc = std::allocator<Elem>, class Byte_alloc = std::allocator<char> > class wstring_convert; |  | (C++11 起) (C++17 中弃用)

类模板 `std::wstring_convert` 用单独的编码转换平面 `Codecvt` ，进行字节字符串 std::string 和宽字符串 std::basic_string<Elem> 间的转换。 `std::wstring_convert` 假定拥有转换平面的所有权，而不能使用 locale 所管理的平面。适用于 `std::wstring_convert` 的标准平面对于 UTF-8/UCS2 和 UTF-8/UCS4 转换是 std::codecvt_utf8 ，而对于 UTF-8/UTF-16 转换是 std::codecvt_utf8_utf16 。

### 成员类型

成员类型 | 定义
`byte_string` | `std::basic_string<char, char_traits<char>, Byte_alloc>`
`wide_string` | `std::basic_string<Elem, char_traits<Elem>, Wide_alloc>`
`state_type` | `Codecvt::state_type`
`int_type` | `wide_string::traits_type::int_type`

### 成员函数

(构造函数) | 构造新的 wstring_convert (公开成员函数)
operator= | 复制赋值运算符被删除 (公开成员函数)
(析构函数) | 析构 wstring_convert 及其转换平面 (公开成员函数)
from_bytes | 转换字节字符串为宽字符串 (公开成员函数)
to_bytes | 转换宽字符串为字符串 (公开成员函数)
converted | 返回成功转换的字符数 (公开成员函数)
state | 返回当前转换状态 (公开成员函数)

### 参阅

字符转换 | 本地环境定义多字节 (UTF-8, GB18030) | UTF-8 | UTF-16
--- | --- | --- | ---
UTF-16 | `mbrtoc16` / `c16rtomb`(有 C11 的 DR488) | `codecvt`<char16_t, char, mbstate_t> `codecvt_utf8_utf16`<char16_t> `codecvt_utf8_utf16`<char32_t> `codecvt_utf8_utf16`<wchar_t> | N/A
UCS2 | `c16rtomb`(无 C11 的 DR488) | `codecvt_utf8`<char16_t> `codecvt_utf8`<wchar_t>(Windows) | `codecvt_utf16`<char16_t> `codecvt_utf16`<wchar_t>(Windows)
UTF-32 | `mbrtoc32` / `c32rtomb` | `codecvt`<char32_t, char, mbstate_t> `codecvt_utf8`<char32_t> `codecvt_utf8`<wchar_t>(非 Windows) | `codecvt_utf16`<char32_t> `codecvt_utf16`<wchar_t>(非 Windows)
系统宽 UTF-32(非 Windows) UCS2(Windows) | `mbsrtowcs` / `wcsrtombs` `use_facet`<`codecvt` <wchar_t, char, mbstate_t>>(`locale`) | 无 | 无

wbuffer_convert (C++11)(C++17 中弃用) | 进行字节流缓冲区和宽流缓冲区间的转换 (类模板)
codecvt_utf8 (C++11)(C++17 中弃用) | 在 UTF-8 与 UCS2/UCS4 间转换 (类模板)
codecvt_utf8_utf16 (C++11)(C++17 中弃用) | 在 UTF-8 与 UTF-16 间转换 (类模板)