首頁  >  文章  >  後端開發  >  為什麼我們不能將指標到指標隱式轉換為 C 中的基底類別?

為什麼我們不能將指標到指標隱式轉換為 C 中的基底類別?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-28 04:42:02276瀏覽

Why Can't We Implicitly Convert a Pointer-to-Pointer to a Base Class in C  ?

派生類別和基底類別之間指標到指標的隱式轉換

在C 中,以下程式碼會引發錯誤:

<code class="cpp">Child **cc = &c;
Base **bb = cc;</code>

錯誤訊息表示沒有從Child** 到Base** 的隱式轉換。但是,允許將子指標分配給基指標:

<code class="cpp">Child *c = new Child();
Base *b = c;</code>

要理解為什麼會有這種差異,請考慮如果允許隱式轉換會發生什麼。然後可以執行以下操作:

<code class="cpp">*bb = new Base;</code>

這將導致 c 指向 Base 的實例,這將違反衍生類別和基底類別的概念。因此,C 禁止這種隱式轉換。

為了允許 Child** 和 Base** 之間的賦值,可以使用 C 風格的強制轉換或 reinterpret_cast,但它們會犧牲類型安全性。無法透過隱式強制轉換或 static_cast 來實現此轉換。

以上是為什麼我們不能將指標到指標隱式轉換為 C 中的基底類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn