c++ - 为什么复制构造函数在下面的程序中被调用了两次?

标签 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)

最佳答案

第一次调用时cc传递给构造函数 B::B(A)B .

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

关于c++ - 为什么复制构造函数在下面的程序中被调用了两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35112621/

相关文章:

android - QT 5.2 Beta 将 QTQuick 部署到 Android 失败 : Invalid json file

c++ - 如果子级覆盖另一个具有相同名称和不同签名的方法,则不会继承基类方法

c++ - 在 C(也是 C++)中, '&' 运算符如何同时用作地址运算符和按位运算符?由于 C 不支持运算符重载

c++ - OpenCV C++中的微小星球全景图

c++ - 在编译时检测 C++ 代码中的重复工作

c++ - 如何获取 wav 文件中的音符列表?

c++ - 在 C++ 中使用 strptime 时出错

c++ - `delete []`时使用 `new [0]`

c++ - 优化 Alpha 混合

c++ - 如何在 Windows 平台上开发 iOS 应用程序?