C++ 中的联合(请解释)
Unions in C++ (Please explain it)
#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
代码的行为未定义。
这只不过是一个精心设计的 联合 type-pun。这是 C++ 标准所不允许的,因为 C++ union
具有 活动成员 的概念。一旦设置了活动成员,就不能以定义的方式读取另一个成员。 (您当然可以通过重新分配来更改活动成员。)
执行 Google 我用斜体标出的术语:这里没有必要深入探讨。
#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
代码的行为未定义。
这只不过是一个精心设计的 联合 type-pun。这是 C++ 标准所不允许的,因为 C++ union
具有 活动成员 的概念。一旦设置了活动成员,就不能以定义的方式读取另一个成员。 (您当然可以通过重新分配来更改活动成员。)
执行 Google 我用斜体标出的术语:这里没有必要深入探讨。