如果我有:
unsigned int x;
x -= x;
很明显,这个表达式后面的x
应该是零,但我看到的任何地方,他们都说这个代码的行为是未定义的,而不仅仅是x
的值(直到减法之前)。
很明显,编译器可以简单地在变量中使用它认为“方便”的任何垃圾值,并且它将按照预期工作。这种方法有什么问题?
是的,这种行为是没有定义的,但原因不同于大多数人意识到的。
首先,使用统一化的值本身并不是未定义的行为,但该值只是不确定的。如果该值恰好是该类型的陷阱表示,那么访问该值就是UB。无符号类型很少具有陷阱表示,因此在这方面相对安全。
使行为未定义的是变量的一个附加属性,即它“可以用register
声明”,即它的地址从未被采用。这类变量被特别处理,因为有些体系结构具有真正的CPU寄存器,这些寄存器具有某种“未初始化”的额外状态,并且与类型域中的值不对应。
如果lvalue指定了一个具有自动存储持续时间的对象,该对象本可以使用register storage类声明(从未使用过其地址),并且该对象未初始化(未使用初始化器声明,并且在使用之前未对其执行赋值),则该行为未定义。
更明确的是,以下守则在任何情况下都是合法的:
unsigned char a, b;
memcpy(&a, &b, 1);
a -= a;
A
和B
的地址,因此它们的值不确定。unsigned char
从不具有未指定值的陷阱表示,因此unsigned char
的任何值都可能发生。A
必须包含值0
。3.19.3未指定值
本国际标准在任何情况下均不要求选择值的相关类型的有效值
我已经检查过自己,我写了一个这样的程序 我运行了几次程序,结果始终是一样的,零。我在C中尝试过,结果是一样的。 但我的教科书说 如果未初始化函数内定义的变量,则该变量值将保持未定义状态。这意味着该元素具有以前驻留在内存中该位置的任何值。 当程序始终将可用内存位置分配给变量时,这怎么可能?它怎么可能是零以外的东西(我假设默认的可用内存值为零)?
本文向大家介绍tensorflow 初始化未初始化的变量实例,包括了tensorflow 初始化未初始化的变量实例的使用技巧和注意事项,需要的朋友参考一下 今日在Stack Overflow上看到一个问如何只初始化未初始化的变量,有人提供了一个函数,特地粘贴过来共大家品鉴: 通过tf.global_variables()返回一个全局变量的列表global_vars, 然后以python列表解析式的
我使用的是Netbeans,编译器说变量可能没有初始化。这是什么意思?