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