2

このシナリオでは、Clang は空の基本クラスの最適化を行わないようです。

struct A { };                          //sizeof(A) == 1 -> OK
struct B : public A { int _intValue; };//sizeof(B) == 4 -> OK, EBCO works here
struct C : public A { B _bValue; };    //sizeof(C) == 8 -> ??? Not OK

g++ は同じ (または同様の) 方法で動作するようです。これは正常ですか?EBCO がここに参入すべきだと思います。

ここで違法になる何かが欠けていますか?

4

2 に答える 2

0

私には違いは、という事実から来ているようです

&B == &(B._intValue)

&C != &(C._bValue._intValue)

(B のインスタンス) の最初のメンバーが基本型 (char、int、...) である場合は有効です&(instance of C) == &(instance of B)&(instance of B) == &first member of (instance of B)

EBCO とはまったく関係がないと思います。

于 2013-07-24T19:23:01.210 に答える
0

プラットフォームで最適なメモリアクセスになる可能性があるため、clang は 4 バイトに調整されているように見えます。そのコードをどのようにコンパイルしましたか?

于 2013-07-25T03:08:13.657 に答える