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

What does `<cuchar>` provide, and where is it documented?

本文关键字:在哪里 什么 记录 lt cuchar gt      更新时间:2023-10-16

新的c++ 11标准提到了一个头文件<cuchar>,大概是类似于C99的<uchar.h>

现在,我们知道c++ 11带来了专门为UTF16和UTF32设计的新字符类型和文字,但我不认为该语言实际上包含将(依赖于系统的)窄多字节编码转换为Unicode编码之一的函数。然而,我刚刚看到<cuchar>的标题简介,提到mbrtoc16/c16rtombrmbrtoc32/c32rtombr的功能似乎就是这样做的。

不幸的是,标准中除了标题概要之外没有说明这些函数。这些函数在哪里定义,它们真正做什么,我在哪里可以读到更多关于它们的信息?这是否意味着现在可以在标准c++中完全使用合适的Unicode,而不需要任何额外的库?

这些在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);

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

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