次のコードがあるとします。
struct Base
{
int x;
int y;
void foo();
virtual unsigned getCrc() = 0;
};
struct Derived1 : public Base
{
int a;
int b;
unsigned getCrc();
};
struct Derived2 : public Base
{
float a;
float b;
unsigned getCrc();
};
それはC ++標準でa
あり、メモリ内にb
あるべきですか? それとも、継承されたオブジェクトをレイアウトするために最も使用される方法ですか? (つまり、コンパイラのデファクトスタンダード)。x
y
つまり、次のことを保証できますか。
Derived1 obj;
int* unsafe_internal_a = (int*)((unsigned)(&obj) + sizeof(Base));
EDIT:私の質問は、「メモリレイアウトはいくつかの標準でカバーされていますか? それともコンパイラ依存ですか?コードは説明用です。