【发布时间】:2012-05-26 21:50:00
【问题描述】:
假设我们有这个代码
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++ 中的设计决策。它不问我能用这种语言做什么或不能做什么,它问为什么会做出某些决定。
【问题讨论】:
-
因为 C 风格的转换太强大了,永远不应该使用,这就是原因。
-
@CatPlusPlus,这正是我的意思,为什么他们有这么大的权力?
-
@unkulunkulu 因为这是 C++。
-
因为 C。它们是语言中最糟糕的部分。
-
将此问题与高质量答案相关联。
标签: c++ class casting upcasting