6
編譯器是否可以自由地對非標準佈局類中的數據進行重新排序?例如,是否允許改變對非標準佈局類的佈局限制
struct
{
char x;
private:
short y;
public:
char z;
};
到
struct
{
private:
short y;
public:
char x;
char z;
};
編譯器是否可以自由地對非標準佈局類中的數據進行重新排序?例如,是否允許改變對非標準佈局類的佈局限制
struct
{
char x;
private:
short y;
public:
char z;
};
到
struct
{
private:
short y;
public:
char x;
char z;
};
編輯:我記錯報價原來,編譯器允許這樣做,每9.2/14
:
非靜態數據成員分配一個具有相同訪問控制權(第11章)的(非聯合)類,以便後面的成員在類對象中擁有更高的地址。未指定具有不同訪問控制的非靜態 數據成員的分配順序(11)。 執行對齊需求可能會導致兩個相鄰成員 不會立即被分配;所以可能會爲空間 要求管理虛擬功能(10.3)和 虛基類(10.1)
什麼不能做的是重新排序以相同的訪問說明符屬性。
這就是說,我不知道任何實現,即使在訪問說明符中,也可以自由地重新排序屬性。
編譯器不允許更改每個訪問規範中的順序。每個訪問規範的順序都是未指定的。編譯器被允許執行O.P.演示的內容。 – John
+1:我一直想知道爲什麼這是標準版。 –