2016-12-07 95 views
2

在C++中,如果我有這樣一個類:必須在內存中聲明彼此相鄰的兩個公用字段「彼此相鄰」嗎?

class Foo { 
public: 
    int a; 
    char b; 
private: 
    char c; 
}; 

這是否意味着a具有在進行分配的Foo一個實例是旁邊內存b

我一直在讀了一下標準here (n4296)的,我發現的唯一語言是(非工會)的

非靜態數據成員的類與同一接入 控制(第11條)被分配,以便後來的成員在類對象內具有更高的地址 。

因此,語言聽起來像它不排除像「a,c,b」而不是「a,b,c」或甚至「c,a,b」這樣的潛在排序。

我搜索了術語contiguous,有趣的是這個標準只出現了21次,但我覺得他們可能用了不同的術語來描述這樣一個想法:「兩個領域的排列方式沒有其他領域它們之間。」

回答

2

線立即一前一後,你引述回答了這個問題:

不同 訪問控制非靜態數據成員的分配的順序是不確定的。實現對齊 要求可能會導致相鄰的兩個不是後立即被分配 相互

於是宣佈未來彼此可能會或可能不會是「相鄰」兩個字段根據實施編譯器。