C ++ 11引入了char16_t
和char32_t
,以便于使用UTF-16和UTF-32编码的文本字符串。但是<iostream>
库仍然只支持实现定义的wchar_t
多字节I / O.
为什么char16_t
和char32_t
的支持未添加到<iostream>
库以补充wchar_t
支持?
答案 0 :(得分:19)
在提案Minimal Unicode support for the standard library (revision 2)中,表明图书馆工作组仅支持字符串和codecvt方面的新字符类型。显然,大多数人反对支持iostream,fstream,除codecvt和regex之外的方面。
根据来自Portland meeting in 2006的分钟,LWG致力于完全支持Unicode,但不打算使用现有库设施的Unicode字符变体复制库。“我还没有找到任何细节,但我想委员会认为当前的库接口不适合Unicode。一个可能的抱怨可能是它设计时考虑了固定大小的字符,但Unicode完全废弃了,因为虽然Unicode数据可以使用固定大小的代码点,但它不会将字符限制为单个代码点。
我个人认为没有理由不标准化已经在各种平台上提供的最小支持(Windows对wchar_t使用UTF-16,大多数Unix平台使用UTF-32)。更高级的Unicode支持将需要新的库设施,但在iostreams和facets中支持char16_t和char32_t不会妨碍,但会启用基本的Unicode i / o。