繁体   English   中英

当我们将引用分配给变量时会发生什么?

[英]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 时,是否有任何触发(移动、复制等)?

你的术语让我感到困惑! 如果你在谈论dc ,我假设你指的是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成为aint d= c; d= a;

引用是安全的,因为它的生命周期比它指向的变量的生命周期短。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM