Довольно теоретический вопрос... Почему постоянные ссылки не ведут себя тот же путь как постоянные указатели, и я могу на самом деле изменить объект, на который они указывают? Они действительно походят на другое простое объявление переменной. Почему я когда-либо использовал бы их? Это - короткий пример, который я выполняю который компиляции и выполнения без ошибок:
int main (){
int i=0;
int y=1;
int&const icr=i;
icr=y; // Can change the object it is pointing to so it's not like a const pointer...
icr=99; // Can assign another value but the value is not assigned to y...
int x=9;
icr=x;
cout<<"icr: "<<icr<<", y:"<<y<<endl;
}
Как это упомянуло в другом, отвечает, ссылка является по сути константой
int &ref = obj;
, После того как Вы инициализировали ссылку с объектом, Вы не можете, развязал эту ссылку с ее объектом, к которому это относится. Ссылка работает точно так же, как псевдоним.
, Когда Вы объявляете const
ссылка, это - только ссылка, которая относится к объекту константы.
const int &ref = obj;
повествовательные предложения выше подобного const
и int
определяют доступные функции объекта, на который сошлется ссылка. Чтобы быть более ясным, я хочу показать Вам pointer
эквивалентный из const
ссылка;
const int *const ptr = &obj;
, Таким образом, вышеупомянутая строка кода эквивалентна const
ссылка ее рабочим способом. Дополнительно , существует один последний момент, который я хочу упомянуть;
ссылка А должна быть инициализирована только с объектом
Поэтому, когда Вы делаете это, Вы собираетесь получить ошибку;
int &r = 0; // Error: a nonconst reference cannot be initialized to a literal
Это правило имеет одно исключение. Если ссылка объявляется как константа, то можно инициализировать ее с литералами также;
const int &r = 0; // a valid approach