union的作用基本是它里面的变量都用了同一块内存,跟起了别名一样,类型不一样的别名。
基本用法:
struct Union
{
union {
float a;
int b;
};
};
Union u;
u.a = 2.0f;
std::cout << u.a << "," << u.b << std::endl;
常规用法,见结构体:
#include <iostream>
#include <string>
#include <vector>
#include <algorithm> /* sort*/
#include <functional> /*std::greater<int>()*/
#include "game.h"
struct Vector2 {
float x, y;
};
struct Vector4
{
/*因使用union方法,故先注释掉*/
// float x, y, z, w;
//Vector2 GetA() { /*这样的方法将会创建一个新的对象,我们不想这么做*/
// return Vector2();
//}
/*一种方法*/
/*Vector2& GetA() {
return *(Vector2*)&x;
}*/
/*但是如果使用Union的话可能就要好的多*/
union {
// float x, y, z, w; /*如果这么写的话是不行的,因为四个值用的同一块内存*/
/*解决办法是用结构体,这里union和struct都没有名字,他们都是匿名函数*/
struct
{
float x, y, z, w;
};
/*这里再向union添加另一个结构体,显然他们是占用同一块内存的
这里就体现了Union的用处*/
struct {
Vector2 a, b;
};
};
};
void PrintVector2(const Vector2& vector2) {
std::cout << vector2.x << " " << vector2.y << std::endl;
}
int main() {
Vector4 vector = { 1.0f, 2.0f, 3.0f, 4.0f };
std::cout << vector.x << std::endl; /*可以看到,还是可以访问x的*/
PrintVector2(vector.a);
PrintVector2(vector.b);
vector.z = 500.0f;
PrintVector2(vector.a);
PrintVector2(vector.b);
struct Union
{
union {
float a;
int b;
};
};
Union u;
u.a = 2.0f;
std::cout << u.a << "," << u.b << std::endl;
/*测试game*/
// game::runGame();
std::cin.get();
}