std::wbuffer_convert<Codecvt,Elem,Tr>::wbuffer_convert
来自cppreference.com
| |
(1) | |
| |
(2) | |
| |
(3) | (C++14 起) |
| 重载 | 数据成员 | ||
|---|---|---|---|
bufptr
|
cvtptr
|
cvtstate
| |
| (1) | nullptr
|
new Codecvt
|
state_type()
|
| (2) | bytebuf
|
pcvt
|
state
|
2) 如果
cvtptr 是空指针,那么行为未定义。参数
| bytebuf | - | 指向底层缓冲区的指针 |
| pcvt | - | 指向独立(不为本地环境所管理)刻面的指针 |
| state | - | 字符转换状态的初始值 |
示例
运行此代码
#include <codecvt>
#include <iostream>
#include <locale>
#include <sstream>
int main()
{
// 包装 UTF-8 字符串流于 UCS4 wbuffer_convert 中
std::stringbuf utf8buf("z\u00df\u6c34\U0001f34c"); // 或 u8"zß水🍌"
// 或 "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9f\x8d\x8c";
std::wbuffer_convert<std::codecvt_utf8<wchar_t>> conv_in(&utf8buf);
std::wistream ucsbuf(&conv_in);
std::cout << "通过 wbuffer_convert 从 UTF-8 stringbuf 读取:";
<< std::hex << std::showbase;
for (wchar_t c; ucsbuf.get(c);)
std::cout << static_cast<std::wint_t>(c) << ' ';
// 包装具 UTF-8 的 std::cout 于 UCS4 wbuffer_convert 中以输出 UCS4
std::wbuffer_convert<std::codecvt_utf8<wchar_t>> conv_out(std::cout.rdbuf());
std::wostream out(&conv_out);
std::cout << "\n通过 wbuffer_convert 向 std::cout 发送 UCS4 数据:";
out << L"z\u00df\u6c34\U0001f34c\n";
}
输出:
通过 wbuffer_convert 从 UTF-8 stringbuf 读取:0x7a 0xdf 0x6c34 0x1f34c
通过 wbuffer_convert 向 std::cout 发送 UCS4 数据:zß水🍌
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
| 缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
|---|---|---|---|
| LWG 2175 | C++11 | pcvt 可以是空指针
|
此时行为未定义 |
| LWG 2176 | C++11 | 构造函数是隐式的 | 改成显式的 |
| P0935R0 | C++11 | 默认构造函数是显式的 | 改成隐式的 |