# std::wbuffer_convert<Codecvt,Elem,Tr>::wbuffer_convert

< cpp‎ | locale‎ | wbuffer convert

wbuffer_convert() : wbuffer_convert(nullptr) { } | (1) |
explicit wbuffer_convert( std::streambuf* bytebuf, Codecvt* pcvt = new Codecvt, state_type state = state_type() ); | (2) |
wbuffer_convert(const std::wbuffer_convert&) = delete; | (3) | (C++14 起)

1) 默认构造函数。
2) 以指定的底层字节流、指定的 `codecvt` 平面和指定的初始转换状态构造 `wbuffer_convert` 对象（所有参数均为可选）。
3) 复制构造函数被删除。 `wbuffer_convert` 非可复制构造 (CopyConstructible) 。

### 参数

bytebuf | - | 指向作为底层窄字符流作用的 std::streambuf 的指针
pcvt | - | 指向独立（不为 locale 所管理）的 std::codecvt 平面的指针。若此指针为空则行为未定义。
state | - | 字符转换状态的初始值

### 缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

DR | 应用于 | 出版时的行为 | 正确行为
--- | --- | --- | ---
P0935R0 | C++11 | 默认构造函数曾为 explicit | 使之为隐式

### 示例

    #include <iostream>
    #include <sstream>
    #include <locale>
    #include <codecvt>
    int main()
    {
        // 包装 UTF-8 字符串流于 UCS4 wbuffer_convert 中
        std::stringbuf utf8buf(u8"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 << "Reading from a UTF-8 stringbuf via wbuffer_convert:\n";
        for(wchar_t c; ucsbuf.get(c); )
            std::cout << std::hex << std::showbase << c << '\n';

        // 包装具 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 << "Sending UCS4 data to std::cout via wbuffer_convert:\n";
        out << L"z\u00df\u6c34\U0001f34c\n";
    }

输出：

    Reading from a UTF-8 stringbuf via wbuffer_convert produces
    0x7a
    0xdf
    0x6c34
    0x1f34c
    Sending UCS4 data to std::cout via wbuffer_convert:
    zß水🍌