【发布时间】:2013-02-13 13:51:43
【问题描述】:
我需要一种快速的方法来获取具有给定位模式的float(提供为int32_t)。当然,编译器应该优化整个构造。简单的转换会进行强制转换并且不允许reinterpret_cast<> ...
【问题讨论】:
-
为什么不允许 reinterpret_cast?见blogs.msdn.com/b/oldnewthing/archive/2013/02/06/10391383.aspx
-
@JohnZwinck
reinterpret_cast<>在指针类型上是允许的,但这确实需要一个内存位置。不适用于寄存器中的变量 -
*(float*)&int32value。从技术上讲不可移植,但实际上可以在任何地方使用。 -
@PeteBecker:我很确定我过去曾设法说服 GCC 破坏您的代码。但不一定当
int32value是参数时,IIRC 我遇到的破坏是严格的别名违规导致源未初始化。 -
@DavidRodríguez-dribeas 我完全同意你的看法。当前的措辞并没有真正表达我很确定的意图:严格的别名规则以允许更好的优化。但是我承认我不太清楚如何用它来表达我认为需要的东西:可见的演员表和联合访问“工作”就像熟悉系统架构的人所期望的那样,但是如果演员或工会不可见,所有赌注都将取消。问题是在这里精确地指定“可见”的含义。
标签: c++ c++11 type-conversion