Ну, почему бы не быть плохо сформированным?
Он плохо сформирован, потому что нарушает очевидные правила правильности констант. В языке C ++ вам не разрешено неявно преобразовывать проход с постоянным доступом в неконстантный путь доступа. То же самое для указателей и для ссылок. В этом и заключается цель постоянных путей доступа: предотвращать изменение объекта, к которому ведет путь. После того, как вы сделали его постоянным, вам не разрешено возвращаться к непостоянному, если вы не приложите конкретные явные и сознательные усилия, чтобы сделать это с помощью const_cast
.
В этом конкретном случае вы можете легко удалить константность из пути доступа, используя const_cast
(для этого const_cast
), и юридически изменить ссылочный объект, так как ссылочный объект не является на самом деле постоянным
int main(){
int x = 10;
const int &z = x;
int &y = const_cast<int &>(z);
y = 42; // modifies x
}