使用不确定的值初始化对象

时间:2011-12-14 20:52:20

标签: c++ initialization undefined-behavior

以下是否会调用未定义的行为?

int x;
int i = x;

来自C ++ 03的参考

  

(4.1 / 1)如果左值引用的对象不是T类型的对象   并且不是从T派生的类型的对象,或者如果对象是   未初始化,需要进行此转换的程序   未定义的行为。

修改 但是,从(3.3.1 / 1)开始,对象可以用自己的不确定值进行初始化,为什么呢?即。

int x = x; //not an undefined behaviour

5 个答案:

答案 0 :(得分:6)

是的,因为您正在读取未初始化且未分配的变量(x)的值。

答案 1 :(得分:1)

如果x未初始化,则未定义,如您的引用中所述。

int x; // 0 initialized
int i = x;

int main() {
  int z; // not initialized
  int k = z; // UB
}

答案 2 :(得分:0)

唯一要记住的是这没关系:

static int x;
int j = x;

但你的例子不是。

答案 3 :(得分:-1)

它调用完美定义的行为。无论在堆栈上分配的垃圾值x是什么,都将按原样分配给i。

但是,根据您的编译器,您可能会收到有关引用未初始化变量的编译时警告。

答案 4 :(得分:-1)

  

int x = x; //不是未定义的行为

错误。