Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用联合来提供更多这样的访问方法安全吗?_C++_Matrix_3d_Unions - Fatal编程技术网

C++ 使用联合来提供更多这样的访问方法安全吗?

C++ 使用联合来提供更多这样的访问方法安全吗?,c++,matrix,3d,unions,C++,Matrix,3d,Unions,我正在创建一个4x4矩阵类,数据在内部表示为16个浮点数组。有时我可能想直接访问此阵列,但有时我可能只想按名称访问阵列插槽 class Matrix{ union{ float array[16]; struct{ float a1, a2, a3, a4; float b1, b2, b3, b4; float c1, c2, c3, c4; float d1

我正在创建一个4x4矩阵类,数据在内部表示为16个浮点数组。有时我可能想直接访问此阵列,但有时我可能只想按名称访问阵列插槽

class Matrix{
    union{
        float array[16];
        struct{
            float a1, a2, a3, a4;
            float b1, b2, b3, b4;
            float c1, c2, c3, c4;
            float d1, d2, d3, d4;
        }named;
        struct{
            float a[4];
            float b[4];
            float c[4];
            float d[4];
        }row;
    }
}

// use
m.array[3] = 1.5f;
m.named.d1 = m.row.a[3];
printf("%f", m.named.d1); // should be 1.5
这类事情是正常的,还是会以我做梦也想不到的方式严重适得其反? 看起来是后者,但我真的很喜欢有多个访问方法


这是用于处理图形的3D点。这本身是一个单独的问题,但是对于已经解决了这些问题的库,任何建议都是完全受欢迎的。

访问非活动的联盟成员不是C。虽然它在某些编译器上工作,但在其他编译器上可能会失败。所以至少你不能声称你的代码是可移植的。@drop-aw,我很害怕。我想我在技术上可以使用getter方法,但是16+方法定义太麻烦了。我想我必须坚持使用数组。如果你想给用户提供方便,你也可以重载操作符[]或操作符,来模拟多维数组。这就是大多数C++数学库的做法。它们中的一些还通过重载运算符提供了不同的矩阵/向量进出方式。这样,您可以保持代码正常,并为用户提供比联合别名更好的语法支持