26
一位同事告訴我,在以下類型中,所有成員都有未指定的內存排序(相對於彼此)。這些成員是否有未指定的順序?
我懷疑這一點,因爲它們都具有相同的訪問級別。
誰是正確的?
struct foo { public: int x; public: int y; public: int z; };
一位同事告訴我,在以下類型中,所有成員都有未指定的內存排序(相對於彼此)。這些成員是否有未指定的順序?
我懷疑這一點,因爲它們都具有相同的訪問級別。
誰是正確的?
struct foo { public: int x; public: int y; public: int z; };
你的同事是正確的C++ 03:
[C++03: 9.2/12]:
非靜態(非工會)類的數據成員宣佈中間沒有訪問說明符分配以至於後來成員在類對象中有更高的地址。未指定由訪問說明符分隔的非靜態數據成員的分配順序(11.1)。 [..]
但你是正確的C++ 11:
(非聯合)的
[C++11: 9.2/14]:
非靜態數據成員類具有相同的訪問控制(第11條)被分配,以便後來的成員在類對象中擁有更高的地址。未指定具有不同訪問控制的非靜態數據成員的分配順序(11)。 [..]
(點的差異。)