在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
将无法工作。 - Mark B