类似于
__m128 a = something;
__m128i b = reinterpret_cast<__m128i>(a);
安全还是不确定?如果未定义,它至少将在所有主要编译器(gcc,clang,msvc,icc)上运行吗?我在我的计算机上使用gcc对其进行了测试,并且可以正常工作,但是我不确定它是否可移植。我知道我可以使用_mm_castps_si128()
,但是由于有了模板,第一种方法碰巧会更方便。
答案 0 :(得分:4)
否,它不是可移植的,并且行为是不确定的; __m128
用于float
,而__m128i
用于整数类型,它们不是兼容类型。
实际上,它甚至没有在MSVC 2017中编译:
error C2440: 'reinterpret_cast': cannot convert from '__m128' to '__m128i'
使用强制类型转换:
__m128 a = something;
__m128i b = _mm_castps_si128(a);
答案 1 :(得分:0)
整数类型可以reinterpret_cast
编辑到指针,引用或它自己的类型。
因此,只有在编译器认为它们是同一类型的情况下,才可以很好地定义两个整数类型之间的转换。