在C++中,如果基类对象实例化为未定义行为作为基础对象,并随后向下转换为派生对象?向下转换基类型
当然,我会认为它肯定是必须是未定义的行为,因为Derived类对象可能有基类没有的成员变量。因此,如果类实例化为基础对象,则这些变量实际上不会存在,这意味着通过派生类指针访问它们必须导致未定义行为。
但是,如果Derived类仅提供额外的成员函数,但不包含任何其他成员数据呢?例如:
class Base
{
public:
int x;
};
class Derived : public Base
{
public:
void foo();
};
int main()
{
Base b;
Derived* d = static_cast<Derived*>(&b);
d->foo(); // <--- Is this undefined behavior?
}
此程序是否会导致未定义的行为?
请注意,在这个例子中,因为没有虚函数'dynamic_cast'将不起作用。 – 2011-05-11 17:13:47