为什么缺少std :: u16cout?

def*_*ode 13 c++ unicode io c++11

C++ 03定义了两种字符类型:charwchar_t.(让我们忽略signed charunsigned char疯狂).

那么这两个字符被施加到std::basic_string,std::basic_ostream等作为std::string/std::wstringstd::ostream/std::wostream.

从流中,标准库还定义了全局变量std::coutstd::wcout.

新的C++ 0x标准定义了两种更多字符类型char16_tchar32_t.但是,唯一的新typedef是std::u16stringstd::u32string.

为什么没有标准供应std::u16ostream?或者怎么样std::u32cout

Boa*_*niv 20

决定实施Unicode iostreams的工作太多了,不值得:http: //www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2238.html

从论文:

忽略这两种新类型的流特化的基本原理是非特征类型的流没有被广泛使用,因此不清楚是否真的需要将这种非常复杂的机器的数量增加一倍.

根据我的理解,标准委员会意识到序列化为宽字符(2或4字节格式)并不常见,而且您需要UTF-16或UTF-32,您可以使用相同的旧字符自己实现它基于字节流的字节流,但有一个codecvt方面可以将您的输入转换为UTF-16/UTF-32,它可以视为另一种多字节格式.