6
非標準レイアウトクラスのデータを並べ替えることはできますか?例えば、それは非標準レイアウトクラスのレイアウト制限
struct
{
private:
short y;
public:
char x;
char z;
};
非標準レイアウトクラスのデータを並べ替えることはできますか?例えば、それは非標準レイアウトクラスのレイアウト制限
struct
{
private:
short y;
public:
char x;
char z;
};
EDITに
struct
{
char x;
private:
short y;
public:
char z;
};
を変更することはできます:コンパイラが行うことを許可されて、私はもともと引用をmisrememberedその9.2/14
あたり:
非静的データメンバ同じアクセスを持つ(非ユニオン)クラスのクラスコントロール(第11節)は、後のメンバーがクラスオブジェクト内でより高い アドレスを持つように割り当てられます。アクセス制御が異なる非スタティック データメンバの割り当て順序は不特定である(11)。 実装アライメントの要件により、隣接する2つのメンバー が互いにすぐ後で割り振られないことがあります。それができないことは何仮想関数を管理するためのスペースのための 要件(10.3)と 仮想基底クラス(10.1)
かもしれませんが、同じアクセス指定子で属性を並べ替えるです。
これは、アクセス指定子を超えて属性を並べ替える自由を取る実装についてはわかりませんが、
コンパイラは、各アクセス仕様内で順序を変更することはできません。各アクセス仕様の順序は不定です。コンパイラは、O.P.が示すものを実行することができます。 – John
+1:私はいつもこれがスタンダードにあるのかどうか疑問に思ってきました。 –