代码之家  ›  专栏  ›  技术社区  ›  Y.T. Ingo Leonhardt

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

  •  -1
  • Y.T. Ingo Leonhardt  · 技术社区  · 3 年前
    class Base {
    };
    class Derived: private Base {
    };
    int main() {
        Derived d;
        static_cast<Base>(d);
    }
    

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

    error: cannot cast 'const Derived' to its private base class 'const Base'
    

    特别是,为什么不将“Derived”强制转换为“Base”?为什么这里有一个常量?提前谢谢。

    1 回复  |  直到 3 年前
        1
  •  3
  •   3CxEZiVlQ    3 年前

    static_cast<Base>(d) 调用隐式复制构造函数 Base(const Base&) 与论点 Derived d ,由引用传递 const Derived& 无法进一步转换为 const Base& 因为你知道的原因。