これらの2つの構造体はレイアウトに対応していますか?同じ型レイアウトの変数の構造体は、その型の配列を含む構造体と互換性がありますか?
struct One {
float x, y, z;
};
struct Two {
float c[3];
};
ように、この説明は(N3797からの)真とみなすことができるので、3台のフロートが含ま両方:タイプのレイアウト互換 ある
16 2つの標準レイアウト構造体(条項9)それらが同じ数の非静的データメンバーを持ち、 対応する非静的データメンバー(宣言順)が のレイアウト互換型(3.9)である場合。
N4659は異なるテキストを有する2つの標準的なレイアウト構造体(条項12) タイプの
共通の初期シーケンスは、非静的データメンバの最長シーケンスとbit-のfi ELDより でありますエンティティがビットマップフィールドであるか、またはその両方が同じ幅を有するビットフィールドであるかのいずれかであるような、構造体のそれぞれの最初のエンティティから始まる。
共通の初期シーケンスがすべてのメンバーで構成され、両方のクラス(6.9)のビットフィールドが の場合、2つの標準レイアウト構造(12節)タイプはレイアウト互換の クラスです。
答えは何されていない場合、彼らはその後、レイアウト互換性がありません:それは、委員会の意向でしたか?おそらく彼らはOne
とTwo
をレイアウト互換にしたいと思うかもしれません(委員会のメンバーがこれを読んで、明確にするかもしれません)。
ボーナスの質問:それは、sizeof(One)==sizeof(Two)
を保証しますか?
それぞれ3つの浮動小数点数を含むことができますが、最初のものは3つのメンバを持ち、2番目のものは1つしかありません。それは 'std :: complex'がこれを行うことを許されていると私は確信していません – NathanOliver
サイズは同じである –
**アライメント**について考える。 ..それは4バイトより大きい**そして**ない。しかし、あなたはそれを強制することができます(携帯ではありません)。 As-isコンパイラは最適なものを自由に行うことができます(最適化のターゲットとアーキテクチャの制限に従って)。 –