私はこのような標準レイアウトのタイプがある場合:このようなユニオンは標準レイアウト型ですか?
struct sl_t
{
int a;
};
とユニオン:
union un_t
{
int b;
double q;
};
私はキャストし、構造体の型として組合を使用することはできますか?つまり、私は、共用体そのものが標準レイアウト型で、データがメモリの先頭に配置されていると仮定してもよいでしょうか?
un_t obj;
sl_t * s = reinterpret_cast<sl_t*>(&obj);
s->a = 15;
assert(obj.b == 15);
または私は労働組合&obj.b
における変数のアドレスを取る必要がありますか?
私が既に知っているのは、構造体をアセンブリ内に格納すると、C++ 11標準では9.5-1を参照してsl_t :: aとun_t :: bの両方にアクセスできることを保証していることに注意してください。
...「&obj.b」はもっと短く安全ですか?私はあなたの動機が不思議です。 –
私はまだ実際にはその周りにreinterpret_castが必要です。私は主に興味がありますが、実際にはこれに頼るのが便利なケースがあります。 –