加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 对struct和相同大小的数组使用union有什么好处

发布时间:2020-12-16 10:05:57 所属栏目:百科 来源:网络整理
导读:我在某处读到了一段用于定义3d坐标的代码.所以,他们使用x,y z坐标如下: union { struct { float x,y,z; }; float _v[3]; }; 我的问题是为什么在这里需要联合以及使用带数组的struct有什么好处? 解决方法 重要说明:此构造导致未定义的行为.接下来是对其作
我在某处读到了一段用于定义3d坐标的代码.所以,他们使用x,y& z坐标如下:

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

我的问题是为什么在这里需要联合以及使用带数组的struct有什么好处?

解决方法

重要说明:此构造导致未定义的行为.接下来是对其作者意图的描述,不幸的是,许多编译器准确地将其转化为作者所期望的行为,这反过来导致这样的代码扩散.

这里并不真正需要union构造:作者为方便起见使用了它.他们在那里建立联合的原因是为自己提供了一种语法,用于以两种不同的方式访问x,y和z:

>通过指定字段名称 – 即coord.x,coord.y或coord.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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读