1

我刚刚从这个很酷的博客中得到信息,我们可以将派生对象转换为不可访问的基类子对象。另一方面,static_cast不能使用 来做到这一点。

class Base {};
class Derived: private Base {};
void main()
{
    Derived d;
    Base* b = (Base*)&d;   // compile passed.
    Base* c = static_cast<Base*>(&d); // compile error.
}

将对象转换为private基础子对象将破坏private关键字的意思,它使调用者可以访问私有对象。我认为 C++ 标准明确允许这样做是有原因的,而“符合 C 语言”的原因对我不起作用,因为 C 语言中没有继承,即使你可以模拟它,这与这个问题无关.

任何人都可以分享一些想法吗?

4

0 回答 0