reinterpret_cast使用之间的区别

时间:2015-01-06 16:00:49

标签: c++ reinterpret-cast

这两个演员陈述是否相同?它们产生相同的结果。

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

如果您使用非数组类型尝试此操作,则第一个不会编译;在投射指针之前,你必须明确地获取地址&a