为什么类型转换操作符不能用于继承类?

iam*_*ind 5 c++ inheritance casting operator-overloading

我有两节课:

struct B {};
struct D {
  operator B& ();
};
Run Code Online (Sandbox Code Playgroud)

当我做;

b = d; // B b; ... D d;
Run Code Online (Sandbox Code Playgroud)

结果是根据期望D::operator B&()调用的地方(演示).

如果D改为,

struct D : B {
  operator B& ();
};
Run Code Online (Sandbox Code Playgroud)

然后D::operator B&()不调用(演示).难道B::B(const B&)是找到一个更好的候选人D,然后D::operator B&()

Sve*_*ven 7

如果D派生自B,则隐式自动转换DB.这比用户定义的转换运算符具有更高的优先级.