我在学习继承和上/下转型时偶然遇到了这个问题。为什么不允许这样做(代码已注释以显示不允许的部分)?现在我可以猜想为什么不允许,但是一个准确的答案会更好。
至于被允许的代码,我知道这是因为(Base*)是一个C风格的转换,实际上在C++中相当于reinterpret_cast,这意味着在这种情况下它将导致未定义的行为。如果我错了,请纠正我。
至于被允许的代码,我知道这是因为(Base*)是一个C风格的转换,实际上在C++中相当于reinterpret_cast,这意味着在这种情况下它将导致未定义的行为。如果我错了,请纠正我。
class Base
{
};
class Derived : public Base
{
};
class DerivedProt : protected Base
{
};
class DerivedPriv : private Base
{
};
int main()
{
Base* a = new Derived();
Base* b = new DerivedProt(); // Not allowed
Base* c = new DerivedPriv(); // Not allowed
Base* d = (Base*) new DerivedProt(); // Allowed but undefined behavior...?
Base* e = (Base*) new DerivedPriv(); // Allowed but undefined behavior...?
}
reinterpret_cast
不知道也不关心基类。它不能用于向上或向下转换。 - curiousguy