为什么类型转换运算符不适用于继承的类?

Why typecasting operator doesn't work with inherited class?

本文关键字:继承 适用于 类型转换 运算符 不适用 为什么      更新时间:2023-10-16

我有两个类:

struct B {};
struct D {
  operator B& ();
};

当我做的时候;

b = d; // B b; ... D d;

结果符合D::operator B&()被调用的期望(Demo)。

如果将D更改为,

struct D : B {
  operator B& ();
};

则不调用D::operator B&() (Demo)。B::B(const B&)是否在D中找到比D::operator B&()更好的候选物?

如果D派生自B,则存在从DB的隐式自动转换。这比用户定义的转换操作符具有更高的优先级。