나는이 같은 표준 레이아웃 유형이있는 경우이 같은노동 조합은 표준 레이아웃 유형입니까?
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가 필요할 것이다. 나는 주로 호기심이 있지만, 실제로 이것에 의존하는 것이 편리한 경우가 있습니다. –