私はPOD、Trivial、Standard-layoutクラスについて非常にnice articleを読んでいます。継承された標準レイアウトルールに非静的メンバーを持つルールがあるのはなぜですか?
のいずれかが、ほとんどの派生クラスで非静的データメンバを持つ多くても1つのベースクラスで何の非静的データメンバを持っていない、またはまったく基底クラスを持っていません。しかし、私は、標準的なレイアウトクラスルールの質問があります非静的データメンバ
と私は、ソースコードを書いた:
#include <iostream>
struct A {
int a;
};
struct B {
int b;
};
struct C : A, B {
int c;
};
int main() {
C c = {}; // initialize C
c.a = 0xffffffff;
c.b = 0xeeeeeeee;
c.c = 0xdddddddd;
std::cout << std::hex << *(reinterpret_cast<int*>(&c) ) << std::endl;
std::cout << std::hex << *(reinterpret_cast<int*>(&c)+1) << std::endl;
std::cout << std::hex << *(reinterpret_cast<int*>(&c)+2) << std::endl;
}
結果は次のとおりです。
ffffffff
eeeeeeee
dddddddd
非常にうまくいくと思います。 VS2015でデバッガを使用すると、正常に見えます。
次に、なぜ継承された標準のレイアウトルールで非静的メンバを持つための制限はありますか?
_「うまくいくと思う」_それはどういう意味ですか? –
特定のコンパイラで "うまくいく"ように見え、ある特定のマシンで動作しているような単一の例で、標準を反証しようとしています。それは動作しません。とにかく、標準的なレイアウトクラスが何であるかを定義するだけで、何の制限も言及していないので、質問を理解できません。 – user463035818
実際これはかなり空白な質問です。それは、誰かが「車」が3輪または4輪を持っていることで定義され、自転車で作業できることを観察したと不平を言うようなものです。ただ意味をなさない。 –