При объявлении типа в C++ может быть не очевидно, к чему относится модификатор const. Например, что в точности означают такие объявления:
И вообще, к чему относится const в общем случае?
Правило простое: const относится к тому, что стоит непосредственно слева от него; либо справа, если слева ничего нет.
Исходя из этого, p1 и p2 имеют одинаковые типы — указатель на константу.
В объявлении p3 const относится к *, то есть к указателю. Поэтому p3 — указатель-константа на readwrite-переменную.
Еще парочка примеров:
const int * p1; int const * p2; int * const p3;
И вообще, к чему относится const в общем случае?
Правило простое: const относится к тому, что стоит непосредственно слева от него; либо справа, если слева ничего нет.
Исходя из этого, p1 и p2 имеют одинаковые типы — указатель на константу.
В объявлении p3 const относится к *, то есть к указателю. Поэтому p3 — указатель-константа на readwrite-переменную.
Еще парочка примеров:
int const * const p4; // константный указатель на константу int * const * p5; // указатель на константный указатель.
Ссылки по теме:
- Развесистый FAQ по «этикету использования» const (это мой корявый перевод const-correctness), который покрывает тему как бык овцу.
- Древний пост alenacpp на эту же тему.
- Для любителей хардкора: как читать сложные C-объявления.
Комментариев нет:
Отправить комментарий