std::cout << "Hi \x4dO\115!\n"; // выводит Hi MOM! и новую строку
std::cout << '\115' << '\n'; // выводит M и новую строку
Обратите внимание: если символ \
сопровождается более чем тремя восьмеричными цифрами, то ассоциируются с ним только первые три. Например, литерал "\1234"
представляет два символа: символ, представленный восьмеричным значением 123, и символ 4. Форма \x
, напротив, использует все последующие шестнадцатеричные цифры; литерал "\x1234"
представляет один 16-разрядный символ, состоящий из битов, соответствующих этим четырем шестнадцатеричным цифрам. Поскольку большинство машин использует 8-битовые символы, подобные значения вряд ли будут полезны. Обычно шестнадцатеричные символы с более чем 8 битами используются для расширенных наборов символов с применением одного из префиксов, приведенных в табл. 2.2.
При помощи суффикса или префикса, представленного в табл. 2.2, можно переопределить заданный по умолчанию тип целого числа, числа с плавающей запятой или символьного литерала.
L'a' // литерал типа wchar_t (широкий символ)
u8"hi!" // строковый литерал utf-8 (8-битовая кодировка Unicode)
42ULL // целочисленный беззнаковый литерал, тип unsigned long long
1E-3F // литерал с плавающей точкой и одинарной точностью, тип float
3.14159L // литерал с плавающей точкой и расширенной точностью,
// тип long double
При обозначении литерала как имеющего тип
long
используйте букву L
в верхнем регистре; строчная буква l
слишком похожа на цифру 1.
Таблица 2.2. Определение типа литерала
Символьные и строковые литералы | |||
---|---|---|---|
Префикс | Значение | Тип | |
U
|
Символ Unicode 16 |
char16_t
|
|
U
|
Символ Unicode 32 |
char32_t
|
|
L
|
Широкий символ |
wchar_t
|
|
U8
|
utf-8 (только строковые литералы) |
char
|
|
Целочисленные литералы | Литералы с плавающей точкой | ||
Суффикс | Минимальный тип | Суффикс | Тип |
u или U |
unsigned
|
f или F |
float
|
l или L |
long
|
l или L |
long double
|
Ll или LL |
long long
|
Можно непосредственно определить знак и размер целочисленного литерала. Если суффикс содержит символ U
, то у литерала беззнаковый тип. Таким образом, у десятичного, восьмеричного или шестнадцатеричного литерала с суффиксом U
будет наименьший тип unsigned int
, unsigned long
или unsigned long long
, в соответствии со значением литерала. Если суффикс будет содержать символ L
, то типом литерала будет по крайней мере long
; если суффикс будет содержать символы LL
, то типом литерала будет long long
или unsigned long long
.
Можно объединить символ U
с символом L
или символами LL
. Литерал с суффиксом UL
, например, задаст тип unsigned long
или unsigned long long
, в зависимости от того, помещается ли его значение в тип unsigned long
.