Что дает "<cuchar>" и где это задокументировано? - PullRequest
16 голосов
/ 27 сентября 2011

В новом стандарте C ++ 11 упоминается заголовок <cuchar>, предположительно по аналогии с C99 <uchar.h>.

Теперь мы знаем, что в C ++ 11 появилось новых типов символов и литералов , специально разработанных для UTF16 и UTF32, но я не думал, что язык на самом деле будет содержать функции для преобразования системы -зависимый) узкая многобайтовая кодировка к одной из кодировок Unicode. Однако я только что натолкнулся на краткий обзор заголовка для <cuchar>, в котором упоминаются функции mbrtoc16 / c16rtombr и mbrtoc32 / c32rtombr, которые, кажется, делают именно это.

К сожалению, стандарт ничего не говорит об этих функциях, кроме краткого описания заголовка. Где эти функции определены, что они на самом деле делают и где я могу прочитать о них больше? Означает ли это, что теперь можно полностью использовать надлежащий Unicode со стандартным C ++, без необходимости в дополнительных библиотеках?

Ответы [ 2 ]

6 голосов
/ 27 сентября 2011

Они были описаны в документе WG21 от 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. Нет нерецензируемых версий, и, если честно, кому они нужны?

1 голос
/ 27 сентября 2011

Вероятно, лучшая документация, о которой я знаю, находится в n1326 , предложение добавить TR19769 в стандартную библиотеку C иметь почти то же самое].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...