我有一个类 Base 和 Class derived 。
- 如果我在我的类中声明一个复制构造函数,编译器会在编译时定义复制构造函数吗?
- 如果调用 Derived 类的复制构造函数会发生什么?它是否依赖于基类复制构造函数?
(在标准编译期间,我需要知道基类和派生之间的关系在复制构造函数方面。编译器是做什么以及如何定义复制构造函数)
我有一个类 Base 和 Class derived 。
(在标准编译期间,我需要知道基类和派生之间的关系在复制构造函数方面。编译器是做什么以及如何定义复制构造函数)
如果我在我的类中声明一个复制构造函数,编译器会在编译时定义复制构造函数吗?
不,它不会。
如果您只声明复制构造函数而不定义它,您最终会出现链接错误。通过为复制构造函数提供显式声明,您可以告诉编译器隐式生成的声明不足以满足您的需求,并承诺您将提供自己的版本。但是当你不提供定义时,你就违背了这个承诺。
如果调用 Derived 类的复制构造函数会发生什么?它是否依赖于基类复制构造函数?
基类中是否存在复制构造函数不会影响派生类中的复制构造函数。规则很简单:
如果您不提供显式声明,编译器会为您的类生成一个复制构造函数。请注意,仅当您的代码使用复制构造函数时,编译器才会这样做。如果编译器检测到您的代码从不使用复制构造函数,那么它就不会生成复制构造函数,因为这是不必要的开销并且违反了 C++ 的基本规则,“您只需为使用的内容付费”