Ответ 1
Потому что это не безопасно для типов. Рассмотрим:
const float f = 2.0;
int foo(const float* &a) {
a = &f;
return 0;
}
int main() {
float* a;
foo(a);
*a = 7.0;
return 0;
}
Любая ссылка или указатель не const
обязательно должна быть инвариантной в указанном типе, потому что указатель или ссылка не const
поддерживает чтение (ковариантная операция), а также запись (контравариантная операция).
const
должен быть добавлен с наибольшего уровня косвенности сначала. Это будет работать:
int foo(float* const &a) {
return 0;
}
int main() {
float* a;
foo(a);
return 0;
}