C ++ - 参考成员的默认初始化 - 这甚至如何工作?

时间:2014-12-04 15:29:03

标签: c++ reference

引用变量的默认初始化会在GCC 4.8中生成错误,但以下内容似乎在没有任何警告/错误的情况下编译和工作。

struct Foo {
    int &bar;

    Foo(): bar(bar) { }
};

int main () {
  Foo foo;
  cout << foo.bar;  // prints 0
  return 0;
}

这是如何编译的?我对这条线特别感到困惑:

Foo(): bar(bar) { }

1 个答案:

答案 0 :(得分:4)

它不起作用,它是未定义的行为。

它编译是因为您通常可以在其初始化中引用变量。这可以有效用途:

void * p = &p;

但在大多数情况下会导致UB。如果启用了足够的警告,您应该收到有关使用未初始化值的警告。在海湾合作委员会中,-Wuninitialized(或-Wall)应该这样做。