【发布时间】:2018-01-12 08:50:48
【问题描述】:
我在cppreference.com看到了下面的例子
int x; // OK: the value of x is indeterminate
int y = x; // undefined behavior
这里,int y = x; 是未定义的行为,因为 x 未初始化。
但是,
unsigned char c; // OK: the value of c is indeterminate
unsigned char d = c; // OK: the value of d is indeterminate
这里,unsigned char d = c; 是不确定的行为,但unsigned char c; 也是一个未初始化的变量。
那么,为什么unsigned char d的值是不确定的?
【问题讨论】:
-
在示例上方的框中对此进行了说明。是否有特定的部分没有意义?
-
@SouravGhosh 如果我遗漏了什么,请原谅我,获取 x 的地址有何改变?
-
@rsp 你是在问为什么
unsigned char是不同的,还是你只是要求一个简单的区别说明,例如 JETM 给出的?目前这实际上是一个非常不清楚的问题。 -
@SouravGhosh 是的,一样。它也可以是UB。即使 x 已获取地址,它也可以在寄存器中直到
&x,在这种情况下,寄存器可以处于“未初始化”状态,这将是一个陷阱表示。 -
@Aconcagua 可能是因为
unsigned char保证没有陷阱表示。如果体系结构存在寄存器问题,则由编译器使用“Something”(非陷阱)初始化寄存器(如果它用于 char)。
标签: c++ initialization language-lawyer undefined-behavior