在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