我知道如果你没有自己实现,编译器有时会提供一个默认的复制构造函数.我很困惑这个构造函数到底是做什么的.如果我有一个包含其他对象的类,其中没有一个具有声明的复制构造函数,那么行为是什么?例如,像这样的类:
class Foo {
Bar bar;
};
class Bar {
int i;
Baz baz;
};
class Baz {
int j;
};
Run Code Online (Sandbox Code Playgroud)
现在,如果我这样做:
Foo f1;
Foo f2(f1);
Run Code Online (Sandbox Code Playgroud)
默认的复制构造函数会做什么?将编译器生成的复制构造函数Foo调用编译器生成的构造函数Bar进行复制bar,然后调用编译器生成的复制构造函数Baz吗?
有没有办法 - 就像查看预处理的结果一样gcc -E- 看看编译成目标文件后我的对象是什么样的?
我说的是GCC,但包括MSVC在内的解决方案没问题.
有没有办法让C++ Prepossessor为所有自动生成的函数打印代码,例如复制和移动构造函数,以及通过命令行选项复制和移动赋值操作符,可能是g ++或clang?