这两个演员陈述是否相同?它们产生相同的结果。
const std::int16_t i = 3;
char a[ 2 ];
*reinterpret_cast<std::int16_t*>(a) = i;
reinterpret_cast<std::int16_t&>(a) = i;
答案 0 :(得分:1)
是的,因为隐式的数组到指针转换。
第一次尝试施放指针;所以数组被转换为指针(到它的第一个元素)以允许该转换。然后取消引用指针,写入数组的字节。
第二个将对数组的引用转换为对整数的引用;对该引用的赋值再次写入数组的字节。
如果您使用非数组类型尝试此操作,则第一个不会编译;在投射指针之前,你必须明确地获取地址&a
。