[英]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.