Слова 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
, сопровождаемого новой строкой. Модифицируйте программу так, чтобы вывести 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
.
Программисты языка С++ используют термин объект (object) часто, и не всегда по делу. В самом общем определении объект — это область памяти, способная содержать данный и обладающая типом.
Одни программисты используют термин объект лишь для переменных и экземпляров классов. Другие используют его, чтобы различать именованные и неименованные объекты, причем для именованных объектов используют термин переменная (variable). Третьи различают объекты и значения, используя термин объект для тех данных, которые могут быть изменены программой, и термин значение (value) — для тех данных, которые предназначены только для чтения.
В этой книге используется наиболее общий смысл термина объект, т.е. область памяти, для которой указан тип. Здесь под объектом подразумеваются практически все используемые в программе данные, независимо от того, имеют ли они встроенный тип или тип класса, являются ли они именованными или нет, предназначены только для чтения или допускают изменение.