我偶然发现了一个我以前从未想过的问题。这里是:每个对象(在初始化列表中列出)的“构造函数”都会被触发。
class B
{
public:
B() { cout<<"B Con\n";}
B(const B &b) { cout<<"B Copy Con\n";}
};
class A
{
public:
A(B &b):_m(b) { cout<<"A Con\n";}
A(const A &a):_m(a._m) { cout<<"A Copy Con\n";}
private:
B _m;
}
main()
{
B b;
A a(b);
}
然后我得到如下输出:
B Con
B Copy Con
A Con
根据输出,我认为“A a(b)”触发了 B 的复制构造函数。如果我猜对了,那就意味着 'A(B &b):_m(b)' 触发 B 的复制构造函数。为什么不是构造函数而是复制构造函数?