为什么复制构造函数在以下程序中被调用了两次?

时间:2016-01-31 10:09:25

标签: c++

为什么在下面的程序中调用复制构造函数两次。这是正确的行为吗?如果我不使用初始化列表,则调用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)

1 个答案:

答案 0 :(得分:4)

第一次将cc传递给B::B(A)的构造函数B时调用它。

第二次在构造函数b.aa的成员初始值设定项列表中使用bb初始化B::B(A)时调用它。