626_____________________________________________Глав;

11.5.3 Применение при передаче параметров
спецификации const

В предыдущем разделе была рассмотрена передача параметров по ссылки. (
решает сразу две задачи: исключает накладные расходы, связанные с копирова:

ем передаваемых значений, и дает функции доступ для изменения значений пе
даваемых аргументов. Однако иногда требуется решать только первую задачу:

бавиться от копирования громоздких аргументов типа больших массивов. Но г
этом не требуется позволять функции изменять значения аргументов.

Это может быть осуществлено передачей в функцию аргументов как конста
Для этого перед соответствующими переменными в списке ставится ключевое с
во const.

При использовании ссылочного параметра заголовок функции (именно зато
вок описания, поскольку в прототипе спецификатор const указывать не обязате
но) может иметь следующий вид:

double F(const &A)

В этом случае аргумент А не будет копироваться при вызове функции,
внутри функции изменить значение А будет невозможно. При попытке сделать
кое изменение компилятор выдаст сообщение: «Cannot modify a const object».

Подобная передача параметра как константы позволяет сделать код более
фективным, так как при этом компилятору заведомо известно, что никакие из;

нения параметра невозможны.

При использовании указателей для передачи параметров в функцию возм(
ны четыре варианта: неконстантный указатель на неконстантные данные, нек
стантный указатель на константные данные, константный указатель на нек
стантные данные и константный указатель на константные данные. Каждая и
бинация обеспечивает доступ с разным уровнем привилегий.

Наивысший уровень доступа предоставляется неконстантным указателем
неконстантные данные — данные можно модифицировать посредством разыме
вания указателя, а сам указатель может быть модифицирован, чтобы он указы
на другие данные. Это описанная в предыдущем разделе передача параметров
ссылке с помощью указателя. В этом варианте передачи параметров специфика'
const не используется.

Неконстантный указатель на константные данные — это указатель, котор
можно модифицировать, чтобы указывать на любые элементы данных подходя]
го типа, но сами данные, на которые он ссылается, не могут быть модифициро
ны. Например, прототип:

void F(const char *sPtr) ;

объявляет функцию, в которую передается указатель sPtr, указывающий на к
стантные данные типа const char * — в данном случае строку (массив символов^
теле функции такой указатель можно менять, перемещая его с одного обрабаты
емого символа на другой. Но сами элементы строки (массива) изменять невозм(
но, так как они объявлены константными. Таким образом, исходные значеЕ
предохраняются от их несанкционированного изменения.

Константный указатель на неконстантные данные — это указатель, котор
всегда указывает на одну и ту же ячейку памяти, данные в которой можно мо,
фицировать посредством указателя. Этот вариант, например, реализуется по ум
чанию для имени массива. Имя массива — это константный указатель на нач.
массива. Используя имя массива и индексы массива можно обращаться ко ю
данным в массиве и изменять их. Прототип функции с передачей константи
указателя на неконстантные данные может иметь вид:

void F( char *const sPtr);