我刚刚从这个很酷的博客中得到信息,我们可以将派生对象转换为不可访问的基类子对象。另一方面,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 语言中没有继承,即使你可以模拟它,这与这个问题无关.
任何人都可以分享一些想法吗?