假设我们有以下代码:
class A {
public:
A() : x(1) {}
virtual ~A() {}
int x;
};
class B {
public:
B() : y(2) {}
virtual ~B() {}
void g()
{
cout << "B::" << y << endl;
}
int y;
};
class C : private A, private B {
public:
void f()
{
B* p = static_cast<B*>( this );
p->g();
}
};
int main()
{
C c;
((B*)&c)->g();
return 0;
}
主函数中的 C 风格强制类型转换无法使用 C++ 的 static_cast、dynamic_cast 和 reinterpret_cast 正确表达。但是为什么一开始就允许这样做呢?这难道不会破坏封装性吗?
更新 这不是链接问题的重复,因为这个问题涉及到 C++ 的设计决策。它并不是询问我能否用该语言做什么或不能做什么,而是询问为什么可能做出某些决策。