c++ - reinterpret_cast 用法之间的区别

标签 c++ reinterpret-cast

这两个cast语句是一样的吗?它们产生相同的结果。

const std::int16_t i =  3;
char a[ 2 ];

*reinterpret_cast<std::int16_t*>(a) = i;
reinterpret_cast<std::int16_t&>(a)  = i;

最佳答案

是的,因为隐式数组到指针的转换。

第一次尝试转换指针;所以数组被转换为一个指针(指向它的第一个元素)以允许该转换。然后取消引用指针,以覆盖数组的字节。

第二个将对数组的引用转换为对整数的引用;对该引用的赋值再次覆盖数组的字节。

如果您尝试使用非数组类型,第一个将无法编译;在转换该指针之前,您必须显式获取地址 &a

关于c++ - reinterpret_cast 用法之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27802381/

相关文章:

c++ - C++ 类中带有引用返回的运算符重载

c++ - 覆盖派生类上的虚函数并仍然调用基本功能

c++ - 从指向具有相同签名的函数的指针转换为函数指针,但参数的附加限定除外

c++ - `fout.write( reinterpret_cast<const char*>(&e), sizeof(e) );` 为什么在这里转换成 `const char*` ?

c++ - 以 "right"方式执行 QThread

c++ - 将缓冲区写入文件(存储 1585 字节而不是 1580)

c++ - OpenGL - 每次单击菜单时对象移动

c++ - 为什么它在这里使用 void** ?

c++ - 了解神秘的C++语句

c++ - Ss 类型是什么意思?