为什么在下面的程序中调用复制构造函数两次。这是正确的行为吗?如果我不使用初始化列表,则调用A的默认构造函数。
class A
{
public:
A(){cout<<"A()\n";}
A(const A &a){cout<<"A(A)\n";}
};
class B
{
private:
A aa;
public:
B(A bb):aa(bb)
{
cout<<"B(A)\n";
}
};
int main(int argc,char** argv)
{
A cc;
B b(cc);
}
输出:
A()
A(A)
A(A)
B(A)
答案 0 :(得分:4)
第一次将cc
传递给B::B(A)
的构造函数B
时调用它。
第二次在构造函数b.aa
的成员初始值设定项列表中使用bb
初始化B::B(A)
时调用它。