【发布时间】:2015-11-08 18:11:51
【问题描述】:
考虑这个例子,基类有一些数据成员,而派生类只提供了一个额外的方法:
struct TestBase
{
int x;
TestBase() : x(5) {}
};
struct TestDerived : public TestBase
{
void myMethod()
{
x=8;
}
};
int main()
{
TestBase b;
TestDerived& d=static_cast<TestDerived&>(b);
d.myMethod();
}
这是向下转换为错误的类型,因此 AFAIU 它具有未定义的行为。但是这种情况是否有例外,派生类的布局与基类的布局相同?
【问题讨论】:
-
TestDerived/TestBase是标准布局类型,因此应该可以很好地保证这将起作用。但没有回答是否合法的问题。
标签: c++ undefined-behavior downcast