如果我有類似下面的代碼:切片,用什麼切片
class Base { /* ... */};
class Derived : public Base { /* ... */ };
int main() {
Base b = Derived{};
}
然後代碼表現出切割問題。任何屬於類Derived
但不屬於類Base
的任何數據都將丟失。但假設Derived
沒有任何不在Base
中的數據成員或基類,所以沒有數據丟失。
此代碼是否仍然顯示未定義的行爲或其他問題?
不,這裏沒有未定義的行爲。 – 2014-11-22 02:17:59
切片不會導致未定義的行爲。只是將派生類複製到基類對象時會發生什麼 - 您失去了「派生性」。 – 0x499602D2 2014-11-22 02:20:33
在這個例子中,你可以簡單地使B的派生類型,如你所知。 – 2014-11-22 02:22:15