首頁 >後端開發 >C++ >C類中非靜態資料成員的初始化順序是什麼?

C類中非靜態資料成員的初始化順序是什麼?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-18 15:12:14384瀏覽

What's the Initialization Order of Non-Static Data Members in C   Classes?

C 中非靜態資料成員的初始化順序

使用非靜態資料成員建立類別的新實例時,它們初始化的順序對於正確的物件構造至關重要。

在這種情況下,讓我們考慮以下內容code:

class A {};
class B {};
class X
{
    A a;
    B b;
};

問題來了:當呼叫類別X的建構子時,首先呼叫哪個建構子(A或B )?它們在類別定義中的位置決定了順序嗎?

根據 C 標準第 12.6.2 節,初始化順序如下:

  • 首先,虛擬基類是已初始化(在這種情況下不適用)。
  • 直接基類依宣告順序初始化(也不適用此處)。
  • 非靜態資料成員按照它們在類別定義中出現的順序進行初始化。
  • 最後,執行建構函式體。

因此,在提供的程式碼中,非靜態資料成員 a 和 b 是按照它們的順序初始化的宣告,首先是a,然後是b。 A 的構造函數將在 B 的構造函數之前被呼叫。

總之,非靜態資料成員的初始化順序由它們在類別定義中的宣告順序決定,而不是由它們在建構函數中的位置決定身體。

以上是C類中非靜態資料成員的初始化順序是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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