首頁 >後端開發 >C++ >為什麼 C 類別必須有使用者定義的預設建構函式來預設建構「const」物件?

為什麼 C 類別必須有使用者定義的預設建構函式來預設建構「const」物件?

Barbara Streisand
Barbara Streisand原創
2024-11-29 10:10:11618瀏覽

Why Must C   Classes Have a User-Defined Default Constructor to Default-Construct a `const` Object?

為什麼 C 需要使用者提供的預設建構子來預設建構 const 物件?

C 標準規定,如果一個程式呼叫 const 限定類型的物件的預設初始化時,底層類別類型必須擁有使用者提供的預設建構子。這個要求源自於以下事實:

  • POD(普通舊資料)類別缺少預設初始化:如果POD 類別沒有配備使用者定義的建構函數,則它是有資格進行預設初始化。然而,缺乏初始化的 POD 物件沒有實際用途,因為它們的狀態仍然不確定。
  • Const 物件需要立即初始化: 與 POD 物件不同,const 物件需要立即初始化,因為它們的狀態不能被確定。一旦建立就改變。如果 POD 類型的 const 物件未初始化,它將變得無用,因為它的值無法修改。

為了防止這種困境,標準規定不能從缺少 POD 類型建構 const 物件使用者提供的預設建構子。這確保 const 物件始終在創建時初始化。

POD 和非 POD 類別之間的區別

為了澄清,該標準的要求專門適用於非 const 物件-POD 課程。 POD 類別缺乏虛擬函數或基類,並且具有本身就是 POD 的資料成員,即使沒有使用者定義的建構函數,也可以預設初始化。相反,非 POD 類別需要使用者提供的預設建構函數來啟用預設初始化。

說明性範例

考慮以下程式碼片段:

在此範例中,結構體A 的const 物件'a' 可以預設構造,因為A 有一個使用者提供的預設建構函數,滿足標準對非POD 類別的要求。

以上是為什麼 C 類別必須有使用者定義的預設建構函式來預設建構「const」物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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