我有一个类Base和Class派生。
(我需要知道基类和标准编译期间复制构造函数派生的关系。编译器定义复制构造函数的方式和方式)
答案 0 :(得分:2)
如果我在我的类中声明了一个复制构造函数,编译器会在编译时定义复制构造函数吗?
没有。它不会。
如果您只是声明了复制构造函数并且没有定义它,那么最终会出现链接错误。通过为复制构造函数提供显式声明,您可以告诉编译器隐式生成的声明不足以满足您的需要,并承诺您将提供自己的版本。但是当你没有提供定义时,你就违背了这个承诺。
如果调用Derived类复制构造函数会发生什么?它取决于Base类复制构造函数吗?
Base类中是否存在复制构造函数不会影响派生类中的复制构造函数。规则很简单:
如果您没有提供显式声明,编译器会为您的类生成一个复制构造函数。请注意,只有在代码使用复制构造函数时,编译器才会这样做。如果编译器检测到你的代码从不使用复制构造函数,那么它就不会生成复制构造函数,因为它是一个不必要的开销并打破了C ++的基本规则,"你只需为你使用的东西付费&#34 34;