假设我们有这个代码
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;
}
main 函数中的 C 风格转换不能正确地用 C++ 转换 ( static_cast
, dynamic_cast
, reinterpret_cast
) 表示。但是首先允许这样做的原因是什么?它不会伤害封装吗?
更新 这不是链接问题的重复,因为这个问题是关于 C++ 中的设计决策。它不问我能用这种语言做什么或不能做什么,它问为什么会做出某些决定。