我需要一种快速的方法来获取具有给定位模式的 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/

10-11 23:06
查看更多