有些東西我無法理解。看看這樣的主:C++瞭解複製構造函數
class C {
public:
C() { cout << "C0 "; }
C(const C&) { cout << "Cc"; }
};
class D {
public:
C c;
D() { cout << "D0 "; }
D(const D&) { cout << "Dd"; }
};
int main() {
D x; cout << endl;
D y(x); cout << endl;
return 0;
}
//output is:
C0 D0
C0 Dd
我同意的事實,D x
給C0 D0
作爲輸出,因爲d類存在於C
默認構造函數的調用,然後創建對象D
。
也D y(x)
就像D y = x
其中(像以前一樣)C被創建(所以輸出C0)和複製構造函數被調用。爲什麼不出現Cc
?如果你考慮這個代碼:
class C {
public:
C() { cout << "C0 "; }
C(const C&) { cout << "Cc"; }
};
class D {
public:
C c;
D() { cout << "D0 "; }
};
int main() {
D x; cout << endl;
D y(x); cout << endl;
return 0;
}
//output is:
C0 D0
Cc
爲什麼現在輸出是Cc
?
的代碼是,除了一個事實,即沒有對D的拷貝構造函數話說D y(x)
就像D y = x
我期望像以前一樣創建(調用默認的構造函數,以便輸出C0
)是c的定義相同然後沒有文字,因爲D(const D&)
是而不是定義。
也許我誤解了複製構造函數。他們在這種情況下叫什麼名字?
你在找什麼是[「隱含聲明的拷貝構造函數」](http://en.cppreference.com/w/cpp/language/copy_constructor#Implicitly-declared_copy_constructor) –
@DrewDormann正是那個;) –