std::wbuffer_convert<Codecvt,Elem,Tr>::wbuffer_convert
来自cppreference.com
< cpp | locale | wbuffer convert
wbuffer_convert() : wbuffer_convert(nullptr) {} | (1) | |
explicit wbuffer_convert( std::streambuf* bytebuf, Codecvt* pcvt = new Codecvt, | (2) | |
wbuffer_convert( const std::wbuffer_convert& ) = delete; | (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 | 默认构造函数是显式的 | 改成隐式的 |