Программирование. Принципы и практика использования C++ Исправленное издание
Шрифт:
Указатель на функцию (см. раздел 27.2.5) можно только копировать и вызывать. Рассмотрим пример.
A.8.2. Массивы
Массив (array) — это неразрывная последовательность объектов (элементов) одинакового типа, имеющая фиксированную длину.
Если массив является глобальным, то его элементы могут быть инициализированы соответствующим значением, принятым для данного типа по умолчанию. Например, значение
Имя массива неявно преобразуется в указатель на его первый элемент. Рассмотрим пример.
Массив или указатель на элемент массива может индексироваться с помощью оператора
Элементы массива нумеруются начиная с нуля (разделы 18.5).
Диапазон индексов массива не проверяется. Кроме того, поскольку они часто передаются с помощью указателей, информация, необходимая для проверки диапазона, передается пользователям ненадежным способом. Рекомендуем использовать класс
Можно определить и использовать массив массивов (двумерный массив), массив массивов массивов (многомерный массив) и т.д. Рассмотрим пример.
Нетривиальное использование многомерных массивов — тонкое и уязвимое для ошибок дело (см. раздел 24.4). Если у вас есть выбор, следует предпочесть класс
A.8.3. Ссылки
Ссылка (reference) — это синоним (alias), т.е. альтернативное имя объекта.
Ссылки часто используются в качестве параметров функций, чтобы предотвратить копирование.
См. разделы 8.5.4–8.5.6.
A.9. Функции
Функция (function) — это именованный фрагмент кода, получающий (возможно, пустой) набор аргументов
и (необязательно) возвращающий значение. Функция объявляется с помощью указания типа возвращаемого значения, за которым следует ее имя и список параметров.
Итак,
Телом функции должен быть блок (см. раздел 8.2) или блок
Функция, в объявлении которой указано, что она возвращает какое-то значение, должна его возвращать (используя оператор
Функция
Функция вызывается с помощью оператора вызова
с соответствующим списком аргументов.
Более подробную информацию о функциях см. в главе 8.
A.9.1. Разрешение перегрузки
Разрешение перегрузки (overload resolution) — это процесс выбора функции для вызова на основе набора аргументов. Рассмотрим пример.
Компилятор, руководствуясь правилами языка, может самостоятельно выбрать правильную функцию. К сожалению, эти правила довольно сложные, поскольку они пытаются учесть максимально сложные примеры. Здесь мы приведем их упрощенный вариант.
Выбор правильного варианта перегруженной функции осуществляется на основе поиска наилучшего соответствия между типами аргументов функции и типами ее параметров (формальных аргументов).