簡體   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