在這個代碼片段中,實際調用哪個構造函數?這裏調用了哪個構造函數?
Vector v = getVector();
矢量有拷貝構造函數,默認的構造函數和賦值操作符:
class Vector {
public:
...
Vector();
Vector(const Vector& other);
Vector& operator=(const Vector& other);
};
getVector的價值回報。
Vector getVector();
代碼使用C++ 03標準。
代碼片段看起來像它應該調用默認的構造函數,然後賦值運算符,但我懷疑這個聲明是使用複製構造函數的另一種形式。哪個是對的?
一個毫無價值的規則是拷貝構造函數必須是可訪問的(例如public),即使拷貝構造本身最終被刪除。因此,可能使拷貝構造函數私有的代碼將無法編譯,並使其成爲公衆將編譯,但拷貝構造函數將不會被調用。 – 6502 2012-03-31 16:22:05
「存儲在v中的相同物理對象」 - 相反,在函數內部創建的對象與「v」是相同的物理對象。我通常說的是'v'是一個對象的名稱,或'v'是對象,而不是「對象存儲在'v'」。這個copy elision的通常實現是'getVector'的調用者傳遞一個指針作爲一個額外的隱藏參數,'getVector'構造它在那個地址的返回值。在這種情況下,標準允許調用代碼將'&v'作爲隱藏參數傳遞。 – 2012-03-31 17:47:42