2016-12-07 14 views
2

、私のようなクラスがある場合:互いに隣接して宣言された2つのパブリックフィールドは、メモリ内で「互いに隣り合っている」必要がありますか? C++で

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

はそれがaFooのインスタンスが割り当てられているときに、メモリ内bの隣なければならないことを意味していますか?

私は標準here (n4296)のビットを読んでいる、と私が見つけた唯一の言語が同じアクセス 制御(第11条)と(非組合)クラスの

非静的データメンバーでした後のメンバーがクラスオブジェクト内のより高いアドレスを持つように割り当てられます。

"a、b、c"、または "c、a、b"の代わりに "a、c、b"のような潜在的な順序を除外しないように、 。

興味深いことに、標準では21回しか出てこないという用語を検索しましたが、別の用語を使って「2つのフィールドが他のフィールドがないように配置されているそれらの間の。"

答えて

2

ラインはすぐに1の後に、あなたは答えにこの質問を引用:

異なる アクセス制御と非静的データメンバの割り当ての順序は不定です。実装のアライメント 要件は、隣接する2人のメンバー直後 が割り当てられていない場合がありますお互い

だから、または「隣同士」であってもなくてもよい隣同士に宣言した2つのフィールドはの実装に依存コンパイラ。

関連する問題