Вы не можете добавить const
к указателю глубиной более одного типа, который не является самим const
, потому что тогда вы можете вставить адрес переменной const
в указатель не const
.Рассмотрим:
char c;
char* p = &c;
const char* cp = p; // ok, only one type deep
const char x;
cp = &x; // ok
const char*& r = p; // fail, because...
r = cp; // ok
*p = 5; // ok, would overwrite a const variable if binding r to p were allowed
Создание указателя const
предотвращает эту катастрофу по-другому.Продолжая пример:
const char* const& cr = p; // ok
cr = cp; // fail, cr is const, saving us from...
*p = 5; // would overwrite a const variable if cr = cp were allowed