Что константа является ссылкой? (не ссылка на константу)

Довольно теоретический вопрос... Почему постоянные ссылки не ведут себя тот же путь как постоянные указатели, и я могу на самом деле изменить объект, на который они указывают? Они действительно походят на другое простое объявление переменной. Почему я когда-либо использовал бы их? Это - короткий пример, который я выполняю который компиляции и выполнения без ошибок:

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; 
}
60
задан 14 September 2011 в 22:26

1 ответ

Как это упомянуло в другом, отвечает, ссылка является по сути константой

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
3
ответ дан 1 November 2019 в 09:39

Другие вопросы по тегам:

Похожие вопросы: