首頁 > 後端開發 > C++ > 主體

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

Susan Sarandon
發布: 2024-11-26 15:31:09
原創
915 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板