`<cuchar>`提供什么,它在哪里记录?

Ker*_* SB 16 c++ unicode c++11

新的C++ 11标准提到了一个标题<cuchar>,可能与C99类似<uchar.h>.

现在,我们知道C++ 11带来了专门为UTF16和UTF32设计的新字符类型和文字,但我不认为该语言实际上会包含将(系统相关的)窄多字节编码转换为其中一个的函数. Unicode编码.但是,我刚刚遇到了<cuchar>提及函数mbrtoc16/ c16rtombrmbrtoc32/ 的头文件概要c32rtombr.

不幸的是,标准没有提到标题概要之外的那些功能.这些功能在哪里定义,他们真正做了什么,在哪里可以阅读更多关于它们的内容?这是否意味着现在可以使用标准C++完全使用适当的Unicode,而无需任何额外的库?

R. *_*des 6

这些在2005年WG21论文中有所描述,但最终标准中没有描述.它们在ISO/IEC 19769:2004(支持新字符数据类型的编程语言C的扩展)(草案)中有记录,C++ 11标准引用了这些内容.

文字太长了,无法在此发布,但这些是签名:

size_t mbrtoc16(char16_t * pc16, const char * s, size_t n, mbstate_t * ps);
size_t c16rtomb(char * s, char16_t c16, mbstate _t * ps);
size_t mbrtoc32(char32_t * pc32, const char * s, size_t n, mbstate_t * ps);
size_t c32rtomb(char * s, char32_t c32, mbstate_t * ps);
Run Code Online (Sandbox Code Playgroud)

这些函数分别在多字节字符和UTF-16或UTF-32字符之间进行转换,类似于mbrtowc.没有非重入版本,老实说,谁需要它们?