【问题标题】:Trouble understanding reference definitions无法理解参考定义
【发布时间】:2013-10-09 15:02:54
【问题描述】:

如果 ri 是对 i 的引用,我不太明白为什么这个输出是 10 10...

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 并且当 d = 1 时 r2 是对 d 的引用,为什么输出不是 1?还有,当r1 = d时,为什么输出不是1呢?

【问题讨论】:

  • 您不能重新分配参考文献。
  • 但是如果 r2 = d 那么为什么 r2 = r1, 1 上的输出不是呢?
  • 在第一个sn-p中,rii的别名。
  • @Tyler,赋值后r2=r1,而r1=i,0,r2为0

标签: c++ reference definitions


【解决方案1】:

引用就像解决原始项目一样。喜欢 *(& 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;  

【讨论】:

  • 谢谢!该网站非常有用!
  • 真正重要的一点是,具有良好命名约定的代码将使您的算法更易于编写、理解和调试,从而降低维护成本。
【解决方案2】:

将引用视为对象的别名(替代名称)。无论您对引用做什么,您都对它所引用的对象进行操作。这里:

int i, &ri = i;

你说 ri 是 i 的另一个名字。因此,这里:

i = 5;

你设置 i = 5,这里

ri = 10;

你设置了 i = 10。

【讨论】:

    猜你喜欢
    • 2023-03-19
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 2017-04-25
    • 1970-01-01
    相关资源
    最近更新 更多