首頁 >後端開發 >C++ >為什麼 C 中的 Const 物件需要使用者定義的預設建構函式?

為什麼 C 中的 Const 物件需要使用者定義的預設建構函式?

Susan Sarandon
Susan Sarandon原創
2024-11-26 15:31:09916瀏覽

Why Do Const Objects in C   Require a User-Defined Default Constructor?

為什麼C 需要使用者提供的建構子來預設初始化常數物件

C 標準規定,當預設初始化a 的物件時const 限定類型,該類型必須具有使用者提供的預設建構函數。這項要求是由於 C 中 POD(普通舊資料)概念和物件初始化之間的相互作用而產生的。

在 C 中,預設會初始化非 POD 類別的物件。但是,POD 是沒有建構函數、驗證器或析構函數的輕量級資料類型,預設不會初始化。這是因為 POD 是為效能敏感的場景而設計的,在這些場景中,明確初始化效率更高。

初始化 const 限定類型的物件時,標準要求使用使用者提供的建構子來確保物件可以已初始化。這是必要的,因為如果底層類別是沒有建構函數的 POD,則該物件將保持未初始化狀態,使其無用。

考慮範例程式碼:

struct B {
  B() : x(42) {}
  int doSomeStuff() const { return x; }
  int x;
};

struct A {
  A() {} // Why is this required?
  B b; // Just for illustration
};

int main() {
  const A a;
}

在此程式碼中,物件 a 是 const 限定的。如果 A 類別沒有使用者提供的建構函數,它將被視為 POD。由於 POD 預設未初始化,因此 a 將未初始化,從而使程式碼無效。

但是,A 類別確實有一個使用者提供的建構函數,這使其成為非 POD。因此,a 透過呼叫構造函數進行預設初始化,程式碼編譯成功。

標準對使用者提供的建構子的要求是為了確保 const 限定型別的物件可以正確初始化和使用.

以上是為什麼 C 中的 Const 物件需要使用者定義的預設建構函式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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