簡體   English   中英

C++ 多個訪問說明符和初始化順序

[英]C++ multiple access specifiers and order of initialization

我們知道在下面的代碼中

class Foo1 {
private:
    int i;
    bool b;
public:
    Foo1() : i(7), b(false) {} 
};

“i”將在“b”之前初始化。 如果我嘗試在“i”之前初始化“b”,我會收到警告。

這個案例怎么樣:

class Foo2 {
private:
    int i;
private:
    bool b;
public:
    // what happens if b is first because compiler reordered?
    Foo2() : b(false),  i(7) {} 
};

我們知道編譯器可以自由排序“i”和“b”,因為它們位於不同的訪問說明符中。

那么在這種情況下初始化的順序是什么?

像前面的簡單案例一樣有任何保證嗎?

保證初始化順序; i總是在b之前初始化。 非靜態數據成員按其在 class 定義中聲明的順序進行初始化,而不管其訪問說明符如何。

[class.base.init]/13.3

然后,非靜態數據成員按照它們在 class 定義中聲明的順序進行初始化(同樣與內存初始化器的順序無關)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM