5 Lexical conventions [lex]

5.13 Literals [lex.literal]

5.13.3 Character literals [lex.ccon]

character-literal:
	encoding-prefixopt ' c-char-sequence '
encoding-prefix: one of
	u8  u  U  L
c-char-sequence:
	c-char
	c-char-sequence c-char
c-char:
	any member of the source character set except
		the single-quote ', backslash \, or new-line character
	escape-sequence
	universal-character-name
escape-sequence:
	simple-escape-sequence
	octal-escape-sequence
	hexadecimal-escape-sequence
simple-escape-sequence: one of
	\'  \"  \?  \\
	\a  \b  \f  \n  \r  \t  \v
octal-escape-sequence:
	\ octal-digit
	\ octal-digit octal-digit
	\ octal-digit octal-digit octal-digit
hexadecimal-escape-sequence:
	\x hexadecimal-digit
	hexadecimal-escape-sequence hexadecimal-digit

Символьный литерал представляет собой один или несколько символов , заключенные в одинарные кавычки, как и в 'x', необязательно предшествует u8, u, U, или L, как в u8'w', u'x', U'y', или L'z', соответственно.

Символьный литерал , который не начинается с u8, u, Uили L это ordinary character literal. Обычный символьный литерал, содержащий единственный c-charпредставимый в наборе символов выполнения, имеет тип charсо значением, равным числовому значению кодировки c-charв наборе символов выполнения. Обычный символьный литерал, содержащий более одного, c-char- это multicharacter literal. Multicharacter буквальный, или обычные символьный литерал , содержащий один c-charне представимы в наборе символов исполнения, условно-поддерживаются, имеет тип int, и имеет определенную реализацию значения.

Символьный литерал, начинающийся с u8, например u8'w', является символьным литералом типа char, известного как UTF-8 character literal. Значение символьного литерала UTF-8 равно его значению кодовой точки ISO 10646 при условии, что значение кодовой точки может быть представлено одной единицей кода UTF-8 (то есть при условии, что оно находится в элементах управления C0 и базовом латинском Unicode. блокировать). Если значение не может быть представлено одной единицей кода UTF-8, программа имеет неправильный формат. Символьный литерал UTF-8, содержащий несколько, c-chars имеет неправильный формат.

Символьный литерал, начинающийся с буквы u, например u'x', является символьным литералом типа char16_­t. Значение char16_­t символьного литерала, содержащего один c-char, равно его значению кодовой точки ISO 10646 при условии, что кодовая точка может быть представлена ​​одной 16-битной кодовой единицей. (То есть при условии, что это базовая кодовая точка многоязычной плоскости.) Если значение не может быть представлено в пределах 16 бит, программа сформирована неправильно. char16_­t Литера , содержащие несколько c-chars плохо сформировано.

Символьный литерал, начинающийся с буквы U, например U'y', является символьным литералом типа char32_­t. Значение char32_­t символьного литерала, содержащего один c-char, равно его значению кодовой точки ISO 10646. char32_­t Литера , содержащие несколько c-chars плохо сформировано.

Символьный литерал, начинающийся с буквы L, например L'z', - это wide-character literal. Литерал с широкими символами имеет тип wchar_­t.24 Значение литерала расширенных символов, содержащего один, c-charимеет значение, равное числовому значению кодировки c-charв наборе расширенных символов выполнения, если только c-charне имеет представления в наборе расширенных символов выполнения, и в этом случае значение равно определяется реализацией. [ Note: Тип wchar_­t может представлять все элементы расширенного набора символов выполнения (см. [basic.fundamental]). ] Значение литерала для широких символов, содержащего несколько, определяется реализацией.end notec-chars

Некоторые неграфические символы, одиночная кавычка ', двойные кавычки ", вопросительный знак ?,25 и обратный слэш \, могут быть представлены в соответствии с таблицей 8. Двойные кавычки " и вопросительный знак ?могут быть представлены сами по себе или с помощью управляющих последовательностей \" и \? соответственно, но одинарная кавычка ' и обратная косая черта \ должны быть представлены управляющими последовательностями \' и \\ соответственно. Управляющие последовательности, в которых символ, следующий за обратной косой чертой, не указан в таблице 8 , поддерживаются условно с семантикой, определяемой реализацией. Управляющая последовательность определяет один символ.

Таблица 8 - escape-последовательности
новая линия NL (LF) \n
горизонтальная табуляция HT \t
вертикальная табуляция VT \v
Backspace BS \b
возврат каретки CR \r
подача формы FF \f
тревога BEL \a
обратная косая черта \ \\
вопросительный знак ? \?
одинарная кавычка ' \'
двойная кавычка " \"
восьмеричное число ооо \ooo
шестнадцатеричный номер ххх \xhhh

Escape \ooo состоит из обратной косой черты, за которой следуют одна, две или три восьмеричных цифры, которые используются для указания значения желаемого символа. Escape \xhhh состоит из обратной косой черты, за которой x следует одна или несколько шестнадцатеричных цифр, которые используются для указания значения желаемого символа. Количество цифр в шестнадцатеричной последовательности не ограничено. Последовательность восьмеричных или шестнадцатеричных цифр завершается первым символом, который не является восьмеричной или шестнадцатеричной цифрой соответственно. Значение символьного литерала определяется реализацией, если оно выходит за пределы определенного реализацией диапазона, определенного для char (для символьных литералов без префикса) или wchar_­t (для символьных литералов с префиксом L). [ Note: Если значение символа буквального префикса u, u8или U находится вне диапазона , определенный для его типа, программа плохо сформировано. ]end note

A universal-character-nameпереводится в кодировку указанного символа в соответствующем наборе символов выполнения. Если такой кодировки нет, universal-character-nameпреобразуется в кодировку, определяемую реализацией. [ Note: На этапе перевода 1 universal-character-nameсимвол a вводится всякий раз, когда в исходном тексте встречается фактический расширенный символ. Поэтому все расширенные символы описываются в терминах universal-character-names. Однако фактическая реализация компилятора может использовать свой собственный набор символов, если будут получены те же результаты. ] end note

Они предназначены для наборов символов, в которых символ не помещается в один байт.

Использование escape-последовательности для вопросительного знака поддерживается для совместимости с ISO C ++ 2014 и ISO C.