directx 12를 이용한 3d 게임 프로그래밍 입문 책을 공부하던 중
xmvectorf32 구조체의 구조에서 union을 보고 잘 모르겠어서 정리했다.
typedef _DECLSPEC_ALIGN_16_ struct XMVECTORF32 {
union {
float f[4];
XMVECTOR v;
};
공용체는 구조체와 유사하다.
차이점은 공용체의 멤버 변수들은 같은 메모리를 공유한다.
공용체는 제일 큰 멤버 변수의 사이즈로 메모리가 할당되며,
같은 메모리를 공유하기 때문에 한 번에 하나의 멤버 변수만 사용이 가능하다.
#include<iostream>
using namespace std;
union A
{
int b;
int c;
}a;
int main() {
a.b = 10;
cout << a.c<<'\n';
}
공용체 A를 선언하고 int형 변수 b에 10을 넣어주었다.
여기서 c를 출력하는데, 구조체의 경우 초기화하지 않아서 쓰레기값이 나올 것이다.
하지만 공용체에서 c를 출력하면 공용체안에 int형 값인 10이 들어있어서
그대로 10이 출력된다.