Мы говорим, что ссылки являются константными указателями. Почему я могу назначить новую переменную для ссылки B? Программа ниже компилируется успешно - PullRequest
0 голосов
/ 22 марта 2010
#include<iostream.h>

int main()
{
int a=10;
int &b=a;

cout<<"B"<<'\n'<<b;
cout<<"A"<<'\n'<<a;
b=100;
cout<<"B"<<'\n'<<b;
cout<<"A"<<'\n'<<a;
int c=20;
b=c;

cout<<"C"<<'\n'<<c;
cout<<"B"<<'\n'<<b;
}

Ответы [ 6 ]

7 голосов
/ 22 марта 2010

Ссылка не является константным указателем.Константный указатель должен быть разыменован для доступа к значению.Вам не нужно разыменовывать ссылки.

Ссылка - это псевдоним - новое имя для той же вещи.Таким образом, код в вашем вопросе действителен, а a и b относятся к одному и тому же.

3 голосов
/ 22 марта 2010

Вы не назначаете новую переменную (рефери) для b, но новое значение для переменной b относится, в данном случае a.

3 голосов
/ 22 марта 2010

Надеюсь, вас не смущают:

B = C;

Это назначит значение c только b. Это не будет относиться к c. (Он все равно будет ссылаться на себя)

2 голосов
/ 22 марта 2010

Ссылка похожа на константный указатель , но не на указатель на константный объект .

const int* p; //can't change the value of *p
int* const p; //can't change p (make it point to a different int)

Ссылки аналогичны последним - после инициализации их нельзя сделать для ссылки на другой объект.

0 голосов
/ 09 мая 2013

когда вы делаете b = c, вы не ссылаетесь на c, а просто присваиваете значение c для b. Если вы хотите проверить значение приращения c и вывести b и c.

0 голосов
/ 22 марта 2010

Ссылка вообще не указатель.

int const & b1 = a; // const reference
int       & b2 = a  // non-const reference
...