2011-08-04 55 views
2

我想知道是否在以下情況下進行復制,或者如果兩個引用都指向同一個對象。考慮一類是從常量ref參數初始化一個常量裁判領域:初始化參考。字段與參考。參數:是否複製?

class Foo { 
public: 
    Foo(const vector<double>& the_doubles) : my_doubles(the_doubles) {} 
private: 
    const vector<double>& my_doubles; 
} 

所以,將my_doubles指向在傳遞給構造相同的載體,或將複製產生的呢?

+0

將* const *引用傳遞給構造函數時,請注意不要傳遞臨時!否則,您的存儲參考將立即失效。 –

回答

2

引用僅爲現有名稱(或有時候,值)引入別名。試想一下:

int a = 42; 
int& b = a; 

b現在是a的別名。如果我們進一步編寫

int& c = b; 

然後c因此是反過來了ab的別名和。

這種情況同樣適用於您的情況:無法複製。

+0

如果你說'int&c = b;'那麼'c'就是*立即*爲'a'的別名。 – fredoverflow

1

它將引用(「點」)與在構造函數中傳遞的相同向量。

否則引用成員將是相當無用的!

+0

是的,它發生在我身上,否則它可能毫無意義! –

+0

在這種特殊情況下,引用成員可能確實無用(綁定到臨時的,僅在構造函數中保持有效)。只能在極其謹慎的情況下使用(內部課程的使用受您控制)? – UncleBens

+0

你誤解了這個問題嗎?沒有臨時的,我可以看到 - 構造函數通過引用。 –

2

有沒有複製,都將指向相同的對象

1

您通過引用傳遞。由於要求爲const,因此只能讀取向量中的變量。由於它是通過引用不會複製。 my_doubles將是const的引用,無論vector傳遞給您的構造函數。