我需要一种快速的方法来获取具有给定位模式的 float
(作为 int32_t
提供)。当然,编译器应该优化整个构造。简单转换进行强制转换并且不允许 reinterpret_cast<>
...
最佳答案
编译器将其优化掉是不可靠的,但它避免了 UB,前提是提供的值确实是浮点数的表示(也就是说,它的大小正确并且其位模式不包含 float
的陷阱表示)。 GCC 至少有时能够将其优化掉:
float convert(int32_t inputvalue) {
float f;
std::memcpy(&f, &inputvalue, sizeof(f));
return f;
}
如果优化是问题的重要部分,那么官方的答案是无法保证未知的编译器会进行给定的优化。但是这个比大多数更难优化。它依赖于编译器“理解”
memcpy
的作用,这比“理解”指针转换的作用更大。关于c++ - 如何在 C++ 中获得具有给定位模式(如 int32_t)的浮点数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14855119/