使用static_cast 運算子向下轉換:揭露未定義的行為
考慮下列問題:
class base { base(); virtual void func(); }; class derived : public base { derived(); void func(); void func_d(); int a; }; int 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將基底指標轉換為派生指標似乎允許存取完整的派生指標物件的大小和功能。然而,這提出了一個問題:如果基指標最初指向一個不同的基對象,這怎麼可能?
。未定義行為的後果可能會有很大差異,包括在這種情況下允許意外存取衍生類別成員函數 func_d()。
向下轉型規則以上是當將基底指標向下轉換為不同的基底物件時,「static_cast」如何看似允許存取派生類別的成員?的詳細內容。更多資訊請關注PHP中文網其他相關文章!