[英]Pass in vs assign const reference in C++
const string& x = functionA();
functionB(x); // depends on x is string or const string&
string str = x;
我們有 const ref x:
傳遞給functionB,所以基本上我們復制x的值並傳遞給functionB? (不,取決於 x 是否參考)
將 x 賦值給 str,所以這里我們也復制 x 的值? 或者我們只是分配參考?
========================
是的,我理解函數 B(x),它取決於傳入的 x 是字符串還是字符串&。 我現在的困惑仍然是關於作業的第二個困惑。
如果我們有類似的東西:
obj.fieldA = x;
obj 已創建,我們只需將 x 分配給 obj 的 fieldA。 那么這里的 x 是副本還是只是參考?
void func(int val);
int a = 11;
int *ptr = &a;
func(*ptr); // same as functionB(x);
所以你是否會通過復制傳遞它實際上取決於functionB的形參;
string str = x;
更新:
這個obj.fieldA = x;
表示您已經創建了Object obj;
據此,聲明obj.fieldA = x;
將只是復制'x'。
也許我不明白你的最后一個問題,但假設 fieldA 又是“字符串”類型;
然后,當你寫obj.fieldA = x;
,會有類似的東西(非常糟糕的例子,只是為了簡化):
string& operator=(const string& other){
..
this->str_pointer = new char[other.size() + 1];
strcpy(this->str_pointer, other.str_pointer);
..
}
這意味着這個 function 獲取了“x”的地址並復制了它的數據。
總結一下:
string first = "text";
const string& x = first; // x behaves just like a pointer and holds address of 'first'
Object obj;
obj.fieldA = x; // <--- here
在我標記的行,由於聲明了 'operator=' 接收引用(地址),您將只傳遞 'x' 的地址,然后 'operator=' 將查看此 memory 地址並制作數據副本,放置在那里.
因此,我們只是將“x”的值分配給.fieldA,而不是引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.