При помощи суффикса или префикса, представленного в табл. 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
.
Слова >true
и >false
— это логические литералы (литералы типа >bool
)
>bool test = false
;
Слово >nullptr
является литеральным указателем. Более подробная информация об указателях и литерале >nullptr
приведена в разделе 2.3.2.
Упражнение 2.5. Определите тип каждого из следующих литералов. Объясните различия между ними:
>(a) 'a', L'a', "a", L"a"
>(b) 10, 10u, 10L, 10uL, 012, 0xC
>(c) 3.14, 3.14f, 3.14L
>(d) 10, 10u, 10., 10e-2
Упражнение 2.6. Имеются ли различия между следующими определениями:
>int month = 9, day = 7;
>int month = 09, day = 07;
Упражнение 2.7. Какие значения представляют эти литералы? Какой тип имеет каждый из них?
>(a) "Who goes with F\145rgus?\012"
>(b) 3.14e1L (c) 1024f (d) 3.14L
Упражнение 2.8. Напишите программу, использующую управляющие последовательности для вывода значения >2M
, сопровождаемого новой строкой. Модифицируйте программу так, чтобы вывести