C ++中的联合(请解释一下)

问题描述

#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进行搜索:在这里更深入地讨论毫无意义。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...