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 note c-chars
Некоторые неграфические символы, одиночная кавычка ', двойные кавычки ", вопросительный знак ?,25 и обратный слэш \, могут быть представлены в соответствии с таблицей 8. Двойные кавычки " и вопросительный знак ?могут быть представлены сами по себе или с помощью управляющих последовательностей \" и \? соответственно, но одинарная кавычка ' и обратная косая черта \ должны быть представлены управляющими последовательностями \' и \\ соответственно. Управляющие последовательности, в которых символ, следующий за обратной косой чертой, не указан в таблице 8 , поддерживаются условно с семантикой, определяемой реализацией. Управляющая последовательность определяет один символ.
новая линия | 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.