小编Lal*_*5th的帖子

重新解释数据会是未定义的行为吗?

最近有人提出这个:

uint8_t a = 0b10000000;
int8_t b = *(int8_t*) &a;
Run Code Online (Sandbox Code Playgroud)

是未定义的行为,因为 的值a超出了我在int8_t. 有人可以解释为什么这是未定义的行为吗?

我的主要问题是内存在那里,并且作为 的内存有效int8_t,唯一的区别是int8_t将该字节解释为-128,而uint8_t将其解释为128。我对此感到更加困惑,因为快速平方根反函数使用:

float y =  /* Some val*/;
int32_t i  = * ( int32_t * ) &y; 
Run Code Online (Sandbox Code Playgroud)

这将给出一个i本质上与 无关的值(除了 IEEE 标准)y,所以我不明白为什么重新解释一段内存可能是未定义的行为。

c++ undefined-behavior

9
推荐指数
1
解决办法
386
查看次数

标签 统计

c++ ×1

undefined-behavior ×1