2013-10-03 4 views
1

Я не совсем понимаю, почему выход на это 10 10, если п является ссылкой на инт ...Trouble ссылочные понимание определения

int i, &ri = i; 
i = 5; 
ri = 10; 
std::cout << i << " " << ri << std::endl; 

Может кто-то ясно, что это для меня?

Аналогично,

int i = 0, &r1 = i; 
double d = 1, &r2 = d; 

r2 = r1; 
std::cout << r2; // output 0 
i = r2; 
std::cout << i; // output 0 
r1 = d; 
std::cout << r1; // output 0 

Если я = г2 и г2 является refrence к D, когда d = 1, то почему не Ouput 1? Кроме того, когда r1 = d, почему также не вывод 1?

+0

Вы не можете переназначить ссылки. – chris

+0

Но если r2 = d, то почему это не выход на r2 = r1, 1? – Tyler

+0

В первом фрагменте 'ri' является псевдонимом для' i'. –

ответ

0

Ссылка - это как обращение к исходному товару. Как * (& some_variable)

В коде поэтому линия

r2 = r1; 

устанавливает значение d к значению i которое 0.

с тех пор все значения 0

если заменить имена r1 с ref_i и r2 к ref_d будет иметь смысл.

Попробуйте здесь:

http://ideone.com/SHxQLN

int i = 0, &ref_i = i; 
double d = 1, &ref_d = d; 

ref_d = ref_i;  // <<-------------------- Put value of i into d 
std::cout << ref_d; 

i = ref_d; 
std::cout << i; 

ref_i = d; 
std::cout << ref_i; 
+0

Спасибо! Этот сайт очень полезен! – Tyler

+0

Очень важно убрать отсюда, что код, который имеет хорошие соглашения об именах, сделает ваши алгоритмы намного легче писать, понимать, отлаживать и, таким образом, снижает стоимость обслуживания. –

0

Думай референции в качестве псевдонима (альтернативное имя) для объекта. Что бы вы ни делали со ссылкой, которую вы делаете с объектом, на который он ссылается. Здесь:

int i, &ri = i; 

Вы говорите, что ri - это другое имя для i. Таким образом, здесь:

i = 5; 

установить I = 5, а вот

ri = 10; 

установить я = 10.

Смежные вопросы