Категории
Самые читаемые
Лучшие книги » Компьютеры и Интернет » Программирование » Язык программирования C++. Пятое издание - Стенли Липпман

Язык программирования C++. Пятое издание - Стенли Липпман

Читать онлайн Язык программирования C++. Пятое издание - Стенли Липпман

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 11 12 13 14 15 16 17 18 19 ... 297
Перейти на страницу:

В языке С++ определены следующие управляющие последовательности.

Новая строка (newline) n Горизонтальная табуляция (horizontal tab) t Оповещение, звонок (alert) a Вертикальная табуляция (vertical tab) v Возврат на один символ (backspace) b Двойная кавычка (double quote) " Наклонная черта влево (backslash) \ Вопросительный знак (question mark) ? Одинарная кавычка (single quote) ' Возврат каретки (carriage return) r Прогон страницы (formfeed) f    

Управляющую последовательность используют как единый символ:

std::cout << 'n';      // отобразить новую строку

std::cout << "tHi!n"; // отобразить табуляцию,

                        // текст "Hi!" и новую строка

Можно также написать обобщенную управляющую последовательность, где за x следует одна или несколько шестнадцатеричных цифр или за следует одна, две или три восьмеричные цифры. Так можно отобразить символ по его числовому значению. Вот несколько примеров (подразумевается использование набора символов Latin-1):

7 (оповещение)    12  (новая строка) 40 (пробел)

(нулевой символ) 115 (символ 'M') x4d (символ 'M')

Как и управляющие последовательности, определенные языком, такой синтаксис можно использовать вместо любого другого символа:

std::cout << "Hi x4dO115!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.

Логические литералы и литеральные указатели

Слова 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 F145rgus?12"

(b) 3.14e1L (c) 1024f (d) 3.14L

Упражнение 2.8. Напишите программу, использующую управляющие последовательности для вывода значения 2M, сопровождаемого новой строкой. Модифицируйте программу так, чтобы вывести 2, затем табуляцию, потом M и наконец символ новой строки.

2.2. Переменные

Переменная (variable) — это именованное хранилище, которым могут манипулировать программы. У каждой переменной в языке С++ есть тип. Тип определяет размер и расположение переменной в памяти, диапазон значений, которые могут храниться в ней, и набор применимых к переменной операций. Программисты С++ используют термины "переменная" и "объект" как синонимы.

2.2.1. Определения переменных

Простое определение переменной состоит из спецификатора типа (type specifier), сопровождаемого списком из одного или нескольких имен переменных, отделенных запятыми, и завершающей точки с запятой. Тип каждого имени в списке задан спецификатором типа. Определение может (не обязательно) предоставить исходное значение для одного или нескольких определяемых имен:

int sum = 0, value, // sum, value и units_sold имеют тип int

    units_sold = 0; // sum и units_sold инициализированы значением 0

Sales_item item;    // item имеет тип Sales_item (см. p. 1.5.1)

// string — библиотечный тип, представляющий последовательность

// символов переменной длины

std::string book("0-201-78345-X"); // book инициализирована строковым

                                   // литералом

В определении переменной book использован библиотечный тип std::string. Подобно классу iostream (см. раздел 1.2), класс string определен в пространстве имен std. Более подробная информация о классе string приведена в главе 3, а пока достаточно знать то, что тип string представляет последовательность символов переменной длины. Библиотечный тип string предоставляет несколько способов инициализации строковых объектов. Один из них — копирование строкового литерала (см. раздел 2.1.3). Таким образом, переменная book инициализируется символами 0-201-78345-X.

1 ... 11 12 13 14 15 16 17 18 19 ... 297
Перейти на страницу:
На этой странице вы можете бесплатно скачать Язык программирования C++. Пятое издание - Стенли Липпман торрент бесплатно.
Комментарии