logo
volkov / C++ / Бьерн Страуструп-Справочное руководство по С++

R.8.2.1 Указатели

В описании T D, в котором D имеет вид

* список-спецификаций-cv opt D1

тип описываемого идентификатора есть

"... список-спецификаций-cv указатель на T". Конструкция

список-спецификаций-cv относится к указателю, а не к указуемому

объекту.

Например, в описаниях

const ci = 10, *pc = &ci, *const cpc = pc;

int i *p, *const cp = &i;

определяются: ci как константа целое; pc как указатель на константу

целое; cpc как константа указатель на константу целое; i как целое;

p как указатель на целое; и cp как константа указатель на целое.

После инициализации значения ci, cpc и cp не могут быть изменены.

Значение pc можно изменять так же, как и значение объекта, на который

указывает cp. Приведем примеры допустимых операций:

i = ci;

*cp = ci;

pc++;

pc = cpc;

pc = p;

Недопустимы следующие операции:

ci = 1; // ошибка

ci++; // ошибка

*pc = 2; // ошибка

cp = &ci; // ошибка

cpc++; // ошибка

p = pc; // ошибка

Каждая из этих операций недопустима или потому, что она изменяет значение

объекта, описанного со спецификацией const, или потому, что делает

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

на объект без спецификации const.

Аналогична ситуация со спецификацией volatile.

Обратитесь к $$R.5.17 и $$R.8.4.

Нельзя описывать указатели на ссылки ($$R.8.2.2) или указатели

на битовые поля ($$R.9.6).