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.