×
Traktatov.net » Язык программирования C++. Пятое издание » Читать онлайн
Страница 35 из 714 Настройки
представляет один 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
>U8utf-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.1.3

Упражнение 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, сопровождаемого новой строкой. Модифицируйте программу так, чтобы вывести