10

列挙型のレイアウトは、基になる型と互換性がありますか? 「はい」、レイアウト互換性がありますが、 、 などにes をstruct kevent使用し、関連するフィールドの適切な基本型を使用します。また、標準レイアウトです (フィールドはすべて標準レイアウトであり、メンバーも基本クラスもありません)。を読んだことから、自分のクラスが同じ値表現を持っていると判断できますが、標準には何も表示されないため、enum classfilterflagsprivatevirtualn3690struct keventreinterpret_castそれは「値の表現」の合理的な解釈のように思えますが。これは標準で技術的に許可されていますか? そうでない場合、型の値表現を知ることで何が得られるでしょうか?

EDIT 2014/02/24 16:45 ESTreinterpret_cast :コメントに応じて、最初のクラスを2番目のクラスへの参照にしたいことを明確にする必要があります。もちろんreinterpret_cast、非ポインター型を別の非・ポインタ型。

4

1 に答える 1

11

reinterpret_castしかし、それが「値の表現」の合理的な解釈のように思えても、標準には何も表示されないため、それらの間を移動できます。これは標準で技術的に許可されていますか?

いいえ。標準は明確で ([basic.lval] p10 を参照)、どのタイプをエイリアス化できるかについて明確であり、レイアウト互換のタイプは含まれていません。

そうでない場合、型の値表現を知ることで何が得られるでしょうか?

タイプが両方とも自明にコピー可能であり、同じ値表現を持っている場合、あるタイプのオブジェクトから別のタイプのオブジェクトに memcpy することができ、その逆も可能です。それらが自明にコピー可能でない場合、それはあなたに多くを与えません。

AFAICT標準では、レイアウト互換型で何ができるか、何ができないかを実際には述べていません。

于 2014-02-25T14:34:01.383 に答える