我想要一个使用 SSE 内在函数实现的 Vector 类(表示 3 个浮点数的向量)(因此我不会使用 __m128 类型的第四个元素)。但我希望能够像属性一样轻松访问它们:因此 myVector.x 将访问 vec 中的 0-31 位,myVector.y 将访问 vec 中的 32-63 位,但不必调用某些 getX()方法。 “x”属性是“vec”的 0-31 位的一种别名。
是否可以 ?
class Vector {
public:
float x;
float y;
float z;
private:
__m128 vec;
}
不可以,因为这违反了强别名规则.
当然,您可以使用强制转换或联合来假装__m128
是一个浮点数组,但优化器不会为您保持一致性,因为您违反了语言的规则。
See 严格的别名规则是什么? https://stackoverflow.com/q/98650/103167
(根据规则,使用联合进行访问是安全的,但这仅适用于命名联合时。获取对联合成员的指针或引用,然后直接使用该指针或引用是不安全的。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)