我有一个关于 C++ 标准的问题。
假设您有一个带有用户定义的复制构造函数和赋值运算符的基类。派生类使用编译器生成的隐式类。
派生类的复制/赋值是否调用用户定义的复制构造函数/赋值运算符?或者您是否需要实现调用基类的用户定义版本?
感谢您的帮助。
我有一个关于 C++ 标准的问题。
假设您有一个带有用户定义的复制构造函数和赋值运算符的基类。派生类使用编译器生成的隐式类。
派生类的复制/赋值是否调用用户定义的复制构造函数/赋值运算符?或者您是否需要实现调用基类的用户定义版本?
感谢您的帮助。
如果派生类未声明复制构造函数,并且将声明隐式构造函数(12.8/4“复制类对象”) - 即使基类具有用户定义和定义的复制构造函数。如果在这种情况下基类具有用户定义的复制构造函数,则使用该用户定义的复制 ctor (12.8/8) 复制该基类子对象。
对于复制赋值运算符(12.8/10 和 12.8.13)也是如此。
因此,如果派生类不需要用户定义的复制 ctor 或“自己的东西”的复制赋值运算符,则不一定需要实现调用基类的用户定义版本。但是,如果派生类确实声明并定义了自己的复制 ctor/复制赋值运算符,那么就基类子对象而言,那些用户定义的实现负责做正确的事情——不再由编译器自动。
仅当派生类具有显式定义的运算符函数时。否则调用父类的op函数。否则,调用隐式 C++。