为什么使用私有继承静态转换 Derived 到 Base 会导致“const Derived”到“const Base”之间的转换?

Lea*_*ics 1 c++ downcast

class Base {
};
class Derived: private Base {
};
int main() {
    Derived d;
    static_cast<Base>(d);
}
Run Code Online (Sandbox Code Playgroud)

我知道由于私有继承,这样的强制转换是一个错误。然而,我感兴趣的是为什么错误消息是:

error: cannot cast 'const Derived' to its private base class 'const Base'
Run Code Online (Sandbox Code Playgroud)

特别是,为什么它不将“Derived”转换为“Base”?为什么这里有一个const?提前致谢。

S.M*_*.M. 5

static_cast<Base>(d)Base(const Base&)使用参数调用隐式复制构造函数Derived d,该参数通过引用传递const Derived&,并且无法const Base&通过众所周知的原因进一步转换。