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

时间:2011-09-26 23:41:40

标签: c++ unicode c++11

新的C ++ 11标准提到了一个标题<cuchar>,大概类似于C99的<uchar.h>

现在,我们知道C ++ 11带来了专为UTF16和UTF32设计的new character types and literals,但我认为该语言实际上不包含转换(依赖于系统的)窄多字节编码的函数到其中一个Unicode编码。但是,我刚刚看到了<cuchar>的标题摘要,其中提到的函数mbrtoc16 / c16rtombrmbrtoc32 / c32rtombr似乎就是这样做的。

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

2 个答案:

答案 0 :(得分:6)

这些在WG21 paper from 2005中描述,但最终标准中没有描述。它们在ISO / IEC 19769:2004(用于支持新字符数据类型的编程语言C的扩展)(draft)中进行了记录,这是C ++ 11标准所引用的。 / p>

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

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);

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

答案 1 :(得分:1)

我所知道的最好的文档可能是n1326,将TR19769添加到C标准库的提议[编辑:虽然看着它,R。Martinho Fernandes引用的N1010似乎有几乎一样]。