2016-11-23 70 views
0

我知道肯定數組元素連續存儲,但如果我像這樣聲明:變量是否在一個結構中連續聲明?

class A { 
    public: 
    int a, b, c; 
    // or 
    int a; 
    int b; 
    int c; 
} 

連續存儲的成員?我一直在考慮是否有可能變量存儲在來自另一個進程的聲明ab之間,因此它不是連續的。但我不確定。有任何保證嗎?

+0

FYI:http://stackoverflow.com/questions/4178175/what-are-aggregates-and-pods-and-how-why-are -they-special –

+0

FYI:http://stackoverflow.com/a/15248697 – Jonas

+0

Woop沒關係,我將標記爲重複謝謝你的鏈接。 @牛米。因爲我測試了它,地址是連續的,所以我猜我有點困惑。 – Greffin28

回答

2

abc保證在結構中以該順序。

但是,一般來說,任何兩個結構成員之間可能存在結構填充。通常,對於只包含int成員的結構沒有填充,但不做這個假設是一個好習慣。

你可以在編譯時檢查:

static_assert(sizeof(A) == 3 * sizeof(int), "oops, A had padding"); 
+0

對不起,延遲迴復。無論如何謝謝,我會盡量避免使用它。 – Greffin28