有些东西我无法理解。看看这样的主: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正是那个;) –