Со знаком из символа и Unicode в C++ 0x

От C++ 0x работающий проект, новые символьные типы (char16_t и char32_t) для обработки Unicode будет не подписан (uint_least16_t, и uint_least32_t будет базовыми типами).

Но насколько я вижу (не очень далеко, возможно), тип char8_t (на основе uint_least8_t) не определяется. Почему?

И это еще более сбивает с толку, когда Вы видите, что новый префикс кодирования u8 представлен для строкового литерала UTF-8... на основе старого друга (знак / неподписанный) символ. Почему?

Обновление: существует предложение добавить новый тип: char8_t

char8_t: тип для символов UTF-8 и строк (Пересмотр 1) http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0482r1.html

10
задан anno 5 April 2018 в 14:38
поделиться

2 ответа

char будет типом, используемым для UTF-8, потому что он переопределен, чтобы быть уверенным, что его можно использовать с ним:

В целях улучшения поддержки для Unicode в компиляторах C ++, определение типа char было изменено, чтобы иметь как минимум размер , необходимый для хранения восьмибитной кодировки UTF-8, так и достаточно большой содержать любой член базового набора символов выполнения компилятора . Ранее был определен только как последний. C ++ 0x будет поддерживать три кодировки Unicode: UTF-8, UTF-16 и {{1} } UTF-32. В дополнение к ранее отмеченным изменениям в определении char, C ++ 0x добавит два новых типа символов : char16_t и char32_t. Эти предназначены для хранения UTF-16 и UTF-32 соответственно.

Источник: http://en.wikipedia.org/wiki/C%2B%2B0x

Большинство приложений UTF-8 в любом случае уже используют символы char на ПК / Mac.

3
ответ дан 4 December 2019 в 03:16
поделиться

char16_t и char32_t предполагается использовать для представления кодовых точек. Поскольку нет отрицательных кодовых точек, разумно, чтобы они были беззнаковыми.

UTF-8 не представляет кодовые точки напрямую, поэтому не имеет значения, подписан ли базовый тип u8 или нет.

2
ответ дан 4 December 2019 в 03:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: