union在XMMATRIX里的妙用

刚才翻xnamath.h看struct XMMATRIX的用法,发现里面的数据成员用了union,于是去补了下知识……


union是一种内存共用类型,比如下面

struct st
{
	int i;
	double f;
};

union un
{
	int i;
	float f;
};

sizeof(st)的话是8,sizeof(un)是4,un里的两个变量都是用同一片内存,修改一个就会直接影响到另外一个,满足一些特殊的数据储存要求


在XMMATRIX里面就可以这样使用的

    union
    {
        XMVECTOR r[4];
        struct
        {
            FLOAT _11, _12, _13, _14;
            FLOAT _21, _22, _23, _24;
            FLOAT _31, _32, _33, _34;
            FLOAT _41, _42, _43, _44;
        };
        FLOAT m[4][4];
    };

这里的r[4],struct和m[4][4]其实就是同一片数据。好处是啥呢?就是使用时可以直接_11,_12这样访问矩阵单个数据,也可以通过r[0],r[1]这样访问矩阵的某一行,或者用二维数组的方式m[0][0]这样去使用,而不需要专门去写处理转换函数

你可能感兴趣的:(DirectX学习笔记)