Подтвердить что ты не робот

В чем смысл символов символов UTF-8, предложенных для С++ 17?

В чем именно заключается их предложение, предложенное N4267?

Их единственная функция, по-видимому, заключается в предотвращении указания расширенных символов ASCII или частичных кодовых точек UTF-8. Они по-прежнему сохраняют 8-разрядную char с фиксированной шириной (которая, как я понимаю, является правильным и лучшим способом обработки UTF-8 в любом случае практически для всех случаев использования), поэтому они не поддерживают не-ASCII персонажей вообще. Что происходит?

(На самом деле я не совсем уверен, что я понимаю необходимость в строковых литералах UTF-8. Думаю, это беспокоит, что компиляторы делают странные/неоднозначные вещи с помощью строк Unicode в сочетании с проверкой Unicode?)

4b9b3361

Ответ 1

Обоснование рассматривается Эволюционная рабочая группа 119: N4197 Добавление символов символов u8, [крошечный] Почему нет символов символов u8?, который отслеживал это предложение и говорит:

У нас есть пять префиксов кодирования для строковых литералов (none, L, u8, u, U) но только четыре для символьных литералов - недостающий - u8 для символьные литералы.

Это имеет значение для реализаций, где узкий исполняемый символ set не является ASCII. В этом случае литералы букв u8 предоставили бы идеальный способ писать символьные литералы с гарантированным ASCII кодирование (кодировка U8 с одним кодом - это точно ASCII), но... мы их не предоставляем. Вместо этого самое лучшее, что можно сделать, это что-то вроде этого:

char x_ascii = { u'x' };

... где мы получим сужение ошибки, если код не помещается в 'char'. (Заметим, что это не совсем то же самое, что и u8'x ', что дайте нам ошибку, если код не был представлен как единый кода в UTF-8.)