gpt4 book ai didi

c++ - 对相同大小的结构和数组使用 union 有什么好处

转载 作者:太空狗 更新时间:2023-10-29 20:09:46 31 4
gpt4 key购买 nike

我在某处读到一段定义 3d 坐标的代码。因此,他们使用了 xyz 坐标,如下所示:

    union
{
struct
{
float x, y, z;
};
float _v[3];
};

我的问题是,为什么这里需要一个union,以及将 struct 与数组一起使用的优势是什么?

最佳答案

重要说明:此构造会导致未定义的行为。以下是对其作者意图的描述,不幸的是,许多编译器将其准确地转换为作者所期望的行为,这反过来又导致了类似代码的激增。

union 构造在这里并不是真正需要的:作者使用它是为了方便。他们放一个 union 的原因是给他们自己一种访问 xyz 的语法两种不同的方式:

  • 通过指定字段名称 - 即 coord.xcoord.ycoord.z,或
  • 通过指定字段索引 - 即 coord._v[0]coord._v[1]coord._v[2].

一种提供类似功能而又不会遇到未定义行为的方法是使用内联成员函数进行访问:

struct Vector3D {
int v[3];
int& x() { return v[0]; }
int& y() { return v[1]; }
int& z() { return v[2]; }
};

int main() {
Vector3D coord;
coord.v[0] = 5;
cout << coord.x() << endl;
coord.y() = 10;
cout << coord.v[1] << endl;
return 0;
}

Demo.

关于c++ - 对相同大小的结构和数组使用 union 有什么好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43071274/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com