gpt4 book ai didi

c++ - 如何在 C++ 中使用 reinterpret_cast?

转载 作者:IT老高 更新时间:2023-10-28 21:59:29 32 4
gpt4 key购买 nike

我知道C++中的reinterpret_cast可以这样使用:

float a = 0;
int b = *reinterpret_cast<int*>(&a);

但是为什么不能直接施法呢?

float a = 0;
int b = reinterpret_cast<int>(a);

error: invalid cast from type 'float' to type 'int'

最佳答案

全部 reinterpret_cast确实是允许您以不同的方式读取您传递的内存。你给它一个内存位置,并要求它读取该内存,就好像它是你要求它读的一样。这就是为什么它只能与指针和引用一起使用。

我们以这段代码为例:

#include <iostream>

int main()
{
float a = 12;
int b = *reinterpret_cast<int*>(&a);

std::cout << b;
}

所以要把这行代码分解成更多细节*reinterpret_cast<int*>(&a); :

  1. a的地址
  2. reinterpret_castint*
  3. 返回 int*指向 a
  4. 将返回的指针的值引用为 int

现在当我运行它时,我得到 1094713344 ,原因是 12 作为 float使用 IEEE 表示为 0100 0001 0100 0000 0000 0000 0000 0000在二进制。现在获取该二进制文件并将其读取为unsigned int , 那么你最终得到 1094713344 .

这就是为什么 reinterpret_cast被认为是非常危险的,为什么不应该在这种情况下使用它。

只有当你有一个指向内存的指针并且你需要以某种方式读取该内存并且你知道内存可以以这种方式读取时,才应该使用它。

关于c++ - 如何在 C++ 中使用 reinterpret_cast?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18544849/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com