目的
提高代码的聚合性。
代码实现
template<typename T>
struct XYZEval {
union {
struct { T x, y, z, e; };
struct { T a, b, c; };
T pos[4];
};
T data;
bool operator==(XYZEval a)
{
return this->x == a.x && this->y == a.y && this->z == a.z;
}
void operator+=(XYZEval b)
{
this->x = b.x;
this->y = b.y;
this->z = b.z;
}
};
int main()
{
struct XYZEval<float> curpos;
curpos = { 11.1,22.2,33.3,8.8,98.789 }; //从上到下一一对应的赋值,没有给值的不赋值
printf("%f,%f,%f,%f\n", curpos.x, curpos.y, curpos.z, curpos.e);
printf("%f,%f,%f\n", curpos.a, curpos.b, curpos.c);
printf("%f,%f,%f,%f\n", curpos.pos[0], curpos.pos[1], curpos.pos[2], curpos.pos[3]);
printf("%f\n", curpos.data);
}
输入如下:
C/C++空结构体
定义一个空结构体,那么,这个结构体占多大空间呢?
在C中,空结构的大小为0。
在C++中,空结构的大小则为1。
为什么 编译器输出的结果为1呢?实例化的原因(空类同样可以被实例化),每个实例在内存中都有一个独一无二的地址,为了达到这个目的,编译器往往会给一个空类隐含的加一个字节,这样空类在实例化后在内存得到了独一无二的地址.所以空类的大小为1.