2011-09-26 34 views
15

新的C++ 11标准提到了一个标头<cuchar>,推测类似于C99的<uchar.h>`<cuchar>`提供了什么,它在哪里记录?

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

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

+0

在C标准? –

+0

@ R.MartinhoFernandes:我没有 - 你有什么细节?即使只是Web引用? –

+0

哎呀,我似乎无法找到那些最新的C99草案(N1124)。事实上,我甚至找不到任何提及'uchar.h'。 –

回答

5

这些描述在WG21 paper from 2005中,但描述不在最终的标准中。它们记录在ISO/IEC 19769:2004(扩展程序中,用于编程语言C以支持新的字符数据类型)(draft),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); 

功能多字节字符和UTF-16或UTF-32字符,分别类似于mbrtowc之间的转换。没有非重入版本,说实话,谁需要它们?

+0

您是否拥有FDIS(表79)? –

+0

@KerrekSB FDIS只包含名称的表格。编辑:找到他们! –

+0

感谢您的更新 - 关于他们应该做什么的文档以及他们如何操作?它完全像'mbsrtowcs'吗? (有趣的是,只有可重入版本。)*编辑:*哦,不,等等,就像'mbrtowc'。不是字符串,只是单个字符。 –

1

可能是我知道的最好的文档是n1326,将TR19769添加到C标准库的建议[编辑:虽然看着它,但R.Martinho Fernandes引用的N1010似乎有很多相同]。

+0

谢谢......虽然现在我觉得我理解*少*。那些宏是什​​么?它们是否影响编译器翻译编码的方式?嗯.... –

+0

@ R.MartinhoFernandes:不是根据链接的文件。它说**如果宏被定义,那么'char32_t'是UTF32编码的; *否则*编码是实现定义的。这是否意味着如果我设置宏,编译器必须生成UTF32,否则它不会? –

+2

@KerrekSB似乎C++ 11标准要求'char16_t'和'char32_t'的字符和字符串是UTF-16和UTF-32,所以在C++中应该定义宏。 –

相关问题