:ベースが空であるにもかかわらず、複数の継承がオブジェクトのサイズを増やすのはなぜですか?このコードが与えられ
#include <iostream>
struct A {
};
struct B {
};
struct C {
};
struct E : A {
int field;
};
struct F : A, B {
int field;
};
struct G : A, B, C {
int field;
};
int main() {
std::cout << _MSC_VER << std::endl;
std::cout << sizeof(E) << std::endl;
std::cout << sizeof(F) << std::endl;
std::cout << sizeof(G) << std::endl;
int o;
std::cin >> o;
return 0;
}
は、私は次の出力が与えられています:
1900
4
8
8
はなぜF
とG
は、それらのベースが空であっても8
の大きさを持っているでしょうか? そして、なぜE
のサイズも増えませんか?
Visual Studio Community 2015、バージョン14.0.25431.01 Update 3でこれを構築しています.MSVC++バージョンは明らかに9.0です。
どうしてですか?そのような独特なメモリレイアウトには、どのような根拠がありますか?
なぜバグでしょうか?コンパイラがどの言語ルールに違反していると思いますか? –
@Kerrek標準に違反していないバグでなければ、それは私の質問にも同様に答えます。 –
@KerrekSB「あなたが使っていないものを支払っていない」という非公式のルールかもしれない。私はそれが違反していたと思えば、それは標準にはないが、それは私に関係するだろう。 – Brian