Ссылки в C ++ отличаются от указателей несколькими существенными способами. Одно из различий заключается в следующем:
Как только ссылка создана, она не может быть позже сделана для ссылки на другой объект; это не может быть повторно установлено. Это часто делается с помощью указателей.
Это означает, что Reference
похожи похожи (см. Ссылку в конце этого ответа) на константный указатель ( не указатель const! ) в C ++ ...
int a = 5;
int& m = a; // Behaves similar to int * const m = &a;
// See the link at the bottom for the differences between const pointer and reference.
и, следовательно, вы не можете изменить / привязать их, чтобы они указывали на какой-то другой адрес. Таким образом, вам не нужен явный квалификатор const
для ссылки, и поэтому он запрещен компилятором.
См. Эту ссылку для изучения Why are references not reseatable in C++?
. Я скопировал принятый ответ по вышеуказанной ссылке:
Причина, по которой C ++ не позволяет перепривязывать ссылки, приведена в «Построении и эволюции C ++» Страуструпа:
It невозможно изменить то, на что ссылается ссылка после инициализации. То есть, после инициализации ссылки на C ++ невозможно сделать ссылку на другой объект позже; это не может быть повторно связано. В прошлом меня укусили ссылки Algol68, где r1 = r2 может либо назначить через r1 объект, на который ссылаются, либо назначить новое ссылочное значение для r1 (повторное связывание r1) в зависимости от типа r2. Я хотел избежать таких проблем в C ++.
РЕДАКТИРОВАТЬ:
См. эту ссылку для Difference between const pointer and reference?
(Спасибо @MM за указание на двусмысленность в моем утверждении).