为什么标准explicate允许C样式转换将派生对象转换为不可访问的基础子对象?

时间:2013-09-11 10:19:55

标签: c++ casting

我只是从这个很酷的blog获取信息,我们可以将派生对象强制转换为不可访问的基类子对象。另一方面,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语言的继承,这与这个问题无关

有人可以分享一些想法吗?

0 个答案:

没有答案