[英]What happen when we assign a reference to a variable?
void func(){
int a = 1;
int b = a; // copy assignemnt
int &c = a; // nothing?
int d = c; // nothing?
}
例如,当我们将引用c
分配给d
时,是否有任何触发(移动、复制等)?
如果d
是实例成员怎么办? 将局部变量引用存储到其中是否安全?
当我们将引用 c 分配给 d 时,是否有任何触发(移动、复制等)?
你的术语让我感到困惑! 如果你在谈论d
和c
,我假设你指的是int d = c;
我将其描述为“将c
指的任何内容分配给d
”。 “将引用 c 分配给 d”听起来太像int& c = d;
.
你的代码有:
int &c = a; // nothing?
int d = c; // nothing?
在第一行中,没有发生任何你需要关心的事情…… c
可以被认为是a
昵称或别名。 (在隐藏的实现级别,它可能会或可能不会帮助图像c
成为一个自动取消引用的指针变量,并且您的int &c = a;
类似于int* p_c = &a;
- 它不会复制或移动任何int
周围的值,也不会以任何方式改变a
。)
在第二行中,变量d
被分配了 a 值a
副本。
如果 d 是实例成员怎么办? 将局部变量引用存储到其中是否安全?
你在想这个错误的方式。 当您分配给成员引用时,您分配给引用的 object,而不是引用本身。 引用的 object 将是某个地方的另一个int
,并且从一个int
到另一个 int 的分配照常进行。
int &c = a;
c
现在指的是与变量a
相同的 memory。 a
在何处实例化并不重要。 当紧随其后
int d = c;
d
获取 c 引用的c
中的值,即与a
相同的 memory ,其中包含一个1
。 所以现在d==1
。
由于d
不是引用,它有自己的 memory(不管它在哪里)和自己的价值。
当然,如果你改为说
c = 2;
然后 c 引用的c
(即与a
相同的 memory)被赋予值2
。 所以现在a==2
。 在哪里声明a
也无关紧要; 它仍然分配给2
。
引用创建另一个变量的别名。
int &c= a;
使c
成为a
和int d= c;
与d= a;
引用是安全的,因为它的生命周期比它指向的变量的生命周期短。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.