Два уровня const:
* Низкий уровень Const
* Верхний уровень Const
Вы должны смотреть на верхний и нижний уровень const через ссылки и указатели, потому что это то, где они актуальны.
int i = 0;
int *p = &i;
int *const cp = &i;
const int *pc = &i;
const int *const cpc = &i;
В приведенном выше коде есть 4 разных объявления указателя. Давайте рассмотрим каждый из них,
int *p
: Обычный указатель может использоваться для внесения изменений в базовый объект и может быть переназначен.
int *const cp
(верхний уровень const): Const Pointer может использоваться для внесения изменений в базовый объект, но не может быть переназначен. (Невозможно изменить его, чтобы он указывал на другой объект.)
const int *pc
(низкоуровневое const): Указатель на Const не может использоваться для внесения изменений в базовый объект, но сам может быть переназначен.
const int *const cpc
(как верхний, так и низкоуровневый const): Const Указатель на Const не может быть использован для внесения изменений в базовый объект и не может быть переназначен.
Кроме того, const верхнего уровня всегда игнорируется при назначении другому объекту, тогда как const низкого уровня не игнорируется.
int i = 0;
const int *pc = &i;
int *const cp = &i;
int *p1 = cp; // allowed
int *p2 = pc; // error, pc has type const int*
Надеюсь, это помогло :)
К вашему сведению: C ++ Primer содержит много информации об этом !!!