考虑:
class base
{
base();
virtual void func();
}
class derived : public base
{
derived();
void func();
void func_d();
int a;
}
main
{
base *b = new base();
sizeof(*b); // Gives 4.
derived * d = static_cast<derived*>(b);
sizeof(*d); // Gives 8- means whole derived obj size..why?
d->func_d();
}
在上面的代码中,我对基本指针进行了向下转换,该基本指针指向基础对象和派生的类指针。我想知道派生指针如何具有整个派生类对象。我可以调用派生类函数(仅在派生类中声明)。我在这里没有得到这个概念。
最佳答案
使用static_cast
将对象转换为实际上没有的类型会产生未定义的行为。 UB的症状差异很大。没有什么说UB不能成功地调用派生成员函数(但是没有任何东西可以保证它会被成功调用,所以不要指望它)。
这是使用static_cast
向下转换的规则,该规则在C++标准(C++ 0x措辞)的5.2.9节([expr.static.cast]
)中找到:
关于c++ - 在C++中使用 'static_cast'向下转换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6322949/