2013-10-03 28 views
1

我不明白为什么在这个输出是10,如果RI是我的参考...无法理解的参考定义

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 

若设为i = R2和R2是refrence到d当d = 1,为什么不输出中1?另外,当r1 = d时,为什么不是输出1呢?

+0

你不能重新分配引用。 – chris

+0

但是,如果r2 = d那么为什么不是r2 = r1,1的输出呢? – Tyler

+0

在第一个片段中,'ri'是'i'的别名。 –

回答

0

引用就像处理原始项目一样。像*(& some_variable)

在你的代码,因此行

r2 = r1; 

di的值,它是0值。

从那时起,所有值都0

如果更换名称r1ref_ir2ref_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 = 5; 

设置I = 5,这里

ri = 10; 

设置I = 10