c++定义到基类的转换

C++ Define Conversion to Base Class

本文关键字:转换 基类 定义 c++      更新时间:2023-10-16

我在定义和使用基类的转换操作符时遇到了困难。考虑以下内容:

class base 
{
public:
    base(const base&);
    base& operator=(const base&);
    //some stuff
};
class child : public base
{
public:
    operator base() const;
    //some more stuff
};
int main()
{
    child c;
    base b=c;
    b=c;
}

如果我尝试将子对象转换为基对象,则永远不会调用operator base()(即使我显式地进行转换)。相反,直接调用基类中的复制构造函数或赋值操作符,而不进行转换。

child被赋值(或复制构造)给base时,如何使operator base()被调用?

到基类的转换函数在语法上是合法的,但它永远不会被调用。来自标准草案n3337:

12.3.2转换函数[class.conv. s]fct]§1

[…转换函数决不用于转换(可能)对象转换为(可能是)相同的对象类型(或对它的引用),对它的基类(可能是cv限定的)类型(或对它的引用),或(可能是cv限定的)void。[…]

语言有不同的从派生到基的转换机制。阅读对象切片。简单地说,它是自动为您完成的。