reinterpret_cast用法之间的区别

Difference Between reinterpret_cast Usage

这两个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