C++ 定义到基类的转换

Ian*_*ney 1 c++ type-conversion

我很难定义和使用转换运算符到基类。考虑以下:

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;
}
Run Code Online (Sandbox Code Playgroud)

如果我尝试将子项转换为基数,operator base()则永远不会调用(即使我使转换显式)。相反,直接调用来自基类的复制构造函数或赋值运算符,无需转换。

operator base()当 achild被分配(或复制构造)到 a时,我怎样才能被调用base

jro*_*rok 5

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

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

[...] 从未使用转换函数将(可能是 cv 限定的)对象转换为(可能是 cv 限定的)相同对象类型(或对它的引用),或(可能是 cv-限定)该类型的基类(或对它的引用),或(可能是 cv 限定的)void。[...]

该语言具有不同的从派生到基类的转换机制。阅读对象切片。简而言之 - 它会自动为您完成。