Язык программирования C++. Пятое издание - Стенли Липпман
Шрифт:
Интервал:
Закладка:
Объявление псевдонима (alias declaration). Определяет синоним для другого типа. Объявление в формате using имя = тип объявляет имя как синоним типа тип.
Оператор &. Оператор обращения к адресу. Возвращает адрес объекта, к которому он был применен.
Оператор *. Оператор обращения к значению. Обращение к значению указателя возвращает объект, на который указывает указатель. Присвоение результату оператора обращения к значению присваивает новое значение основному объекту.
Оператор объявления (declarator). Часть объявления, включающая определяемое имя и, необязательно, модификатор типа.
Определение (definition). Резервирует область в памяти для хранения данных переменной и (необязательно) инициализирует ее значение. Никакие имена не могут быть использованы, пока они не определены или не объявлены.
Переменная (variable). Именованный объект или ссылка. В языке С++ переменные должны быть объявлены перед использованием.
Переменная constexpr. Переменная, которая представляет константное выражение.
Функции constexpr рассматриваются в разделе 6.5.2.
Переменная препроцессора (preprocessor variable). Переменная, используемая препроцессором. Препроцессор заменяет каждую переменную препроцессора ее значением прежде, чем программа будет откомпилирована.
Переменная-член (data member). Элемент данных, которые составляют объект. Каждый объект некоего класса обладает собственными экземплярами переменных-членов. Переменные-члены могут быть инициализированы в объявлении класса.
Преобразование (conversion). Процесс, в результате которого значение одного типа преобразуется в значение другого. Преобразования между встроенными типами определены в самом языке.
Препроцессор (preprocessor). Препроцессор — это программа, автоматически запускаемая перед компилятором С++.
Псевдоним типа (type alias). Имя, являющееся синонимом для другого типа. Определяется при помощи ключевого слова typedef или объявления псевдонима.
Раздельная компиляция (separate compilation). Возможность разделить программу на несколько отдельных файлов исходного кода.
Связывание (bind). Соединение имени с указанной сущностью, чтобы использование имени приводило к использованию основной сущности. Например, ссылка — это имя, связанное с объектом.
Слово (word). Специфический для каждой машины размер блока памяти, применяемый при целочисленных вычислениях. Обычно размер слова достаточно велик, чтобы содержать адрес. 32-битовое слово обычно занимает 4 байта.
Составной тип (compound type). Тип, определенный в терминах другого типа.
Спецификатор auto. Спецификатор типа, позволяющий вывести тип переменной из ее инициализатора.
Спецификатор const верхнего уровня (top-level const). Спецификатор const, указывающий, что объект не может быть изменен.
Спецификатор const нижнего уровня (low-level const). Спецификатор const не верхнего уровня. Такие спецификаторы const являются неотъемлемой частью типа и никогда не игнорируются.
Спецификатор const. Спецификатор типа, определяющий объекты, которые не могут быть изменены. Константные объекты следует инициализировать, поскольку нет никакого способа присвоить им значение после определения.
Спецификатор decltype. Спецификатор типа, позволяющий вывести тип переменной или выражения.
Спецификатор типа (type specifier). Имя типа.
Списочная инициализация (list initialization). Форма инициализации, подразумевающая использование фигурных скобок для включения одного или нескольких инициализаторов.
Ссылка (reference). Псевдоним другого объекта.
Ссылка на константу (reference to const). Ссылка, неспособная изменить значение объекта, на который она ссылается. Ссылка на константу может быть связана с константным, неконстантным объектом или с результатом выражения.
Тип string. Библиотечный тип, представляющий последовательность символов переменной длины.
Тип void*. Специальный тип указателя, способного указывать на любой неконстантный тип. Обращение к значению таких указателей невозможно.
Тип void. Специальный тип без значения и допустимых операций. Нельзя определить переменную типа void.
Указатель (pointer). Объект, способный содержать адрес объекта, следующий адрес за концом объекта или нуль.
Указатель на константу (pointer to const). Указатель, способный содержать адрес константного объекта. Указатель на константу не может использоваться для изменения значения объекта, на который он указывает.
Управляющая последовательность (escape sequence). Альтернативный механизм представления символов. Обычно используется для представления непечатаемых символов, таких как символ новой строки или табуляции. Управляющая последовательность состоит из символа наклонной черты влево, сопровождаемой символом, восьмеричным числом из трех цифр, или символа x, сопровождаемого шестнадцатеричным числом.
Член класса (class member, member). Часть класса.
Глава 3
Типы string, vector и массивы
Кроме встроенных типов, рассмотренных в главе 2, язык С++ предоставляет богатую библиотеку абстрактных типов данных. Важнейшими библиотечными типами являются тип string, поддерживающий символьные строки переменной длины, и тип vector, определяющий коллекции переменного размера. С типами string и vector связаны типы, известные как итераторы (iterator). Они используются для доступа к символам строк и элементам векторов.
Типы string и vector, определенные в библиотеке, являются абстракциями более простого встроенного типа массива. Эта главы посвящена массивам и введению в библиотечные типы vector и string.
Встроенные типы, рассмотренные в главе 2, определены непосредственно языком С++. Эти типы представляют средства, которые сами по себе присущи большинству компьютеров, такие как числа или символы. Стандартная библиотека определяет множество дополнительных типов, высокоуровневый характер которых аппаратными средствами компьютеров, как правило, не реализуется непосредственно.
В данной главе представлены два важнейших библиотечных типа: string и vector. Тип string — это последовательность символов переменной длины. Тип vector содержит последовательность объектов указанного типа переменной длины. Мы также рассмотрим встроенный тип массива. Как и другие встроенные типы, массивы представляют возможности аппаратных средств. В результате массивы менее удобны в использовании, чем библиотечные типы string и vector.
Однако, прежде чем начать исследование библиотечных типов, рассмотрим механизм, упрощающий доступ к именам, определенным в библиотеке.
3.1. Пространства имен и объявления using
До сих пор имена из стандартной библиотеки упоминались в программах явно, т.е. перед каждым из них было указано имя пространства имен std. Например, при чтении со стандартного устройства ввода применялась форма записи std::cin. Здесь использован оператор области видимости :: (см. раздел 1.2). Он означает, что имя, указанное в правом операнде оператора, следует искать в области видимости, указанной в левом операнде. Таким образом, код std::cin означает, что используемое имя cin определено в пространстве имен std.
При частом использовании библиотечных имен такая форма записи может оказаться чересчур громоздкой. К счастью, существуют и более простые способы применения членов пространств имен. Самый надежный из них — объявление using (using declaration). Другие способы, позволяющие упростить использование имен из других пространств, рассматриваются в разделе 18.2.2.
Объявление using позволяет использовать имена из другого пространства имен без указания префикса имя_пространства_имен::. Объявление using имеет следующий формат:
using пространство_имен::имя;
После того как объявление using было сделано один раз, к указанному в нем имени можно обращаться без указания пространства имен.
#include <iostream>
// объявление using; при использовании имени cin теперь
// подразумевается, что оно принадлежит пространству имен std
using std::cin;
int main() {