问题描述
#include <iostream>
#define print(x) std::cout << x
#define println(x) std::cout << x << std::endl
struct Vector2 {
float x,y;
};
struct Vector4 {
union {
struct {
float x,y,z,w;
};
struct {
Vector2 a,b;
};
};
};
void PrintVector2(const Vector2& vector) {
println(vector.x << "," << vector.y);
}
int main() {
Vector4 vector = { 1,2,3,4 };
vector.x = 2;
vector.z = 500.0f;
PrintVector2(vector.a);
PrintVector2(vector.b);
}
任何人都可以解释这段代码中发生了什么吗?,我不明白什么是联合体 以及它们如何工作:/!
这是输出
2,2
500,4
解决方法
代码的行为是不确定的。
这仅是精心制作的 un-type 的缩写。 C ++标准不允许这样做,因为C ++ union
具有活动成员的概念。设置活动成员后,您将无法以定义的方式读取其他成员。 (您当然可以通过重新分配来更改活动成员。)
按照我的斜体字对Google进行搜索:在这里更深入地讨论毫无意义。