C++20特性标准::位转换:将类型从重新解释为类型到时,值会发生什么变化

r3i60tvu  于 2023-02-01  发布在  其他
关注(0)|答案(1)|浏览(81)

C++20中的std::bit_castreinterpret_cast的一个更安全的版本,它可以与constexpr一起工作,所以我读到了,但是这是否意味着所涉及的变量的实际值也会按位重新解释?例如,下面的简单代码

#include <iostream>
#include <bit>

int main()
{
    float f = 123.017;
    auto f_int = std::bit_cast<int>(f);

    std::cout << "f : " << f << ", f_int : " << f_int << std::endl;
}

产生此输出
f:123.017,f_整数:1123420340
我尝试使用std::bit_cast安全地重新解释数据类型,希望保留原始数据值的缩小版本,这显然没有发生。

hsgswve4

hsgswve41#

std::bit_castmemcpy相同,原始值的位数与转换值的位数相同。您可能在static_cast之后:

#include <bit>
#include <stdio.h>

using namespace std;

int main()
{
    float f = 123.017;
    auto a = static_cast<int>(f);
    auto b = std::bit_cast<int>(f);
    
    printf("f: %f a: %d b: %d\n", f, a, b); // f: 123.016998 a: 123 b: 1123420340

    return 0;
}

相关问题