[英]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 定義中聲明的順序進行初始化(同樣與內存初始化器的順序無關)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.