使用临时对象初始化引用

时间:2014-11-13 00:07:32

标签: c++ compilation compiler-errors compiler-warnings

前几天我遇到了一个bug,或多或少都出现了这个问题:

struct Foo {
  Foo(T x) : x_(x) {}
  T& x_;
};

int main() {
  T x;
  auto foo = Foo(x);
}

这很傻。构造Foo时,其参数按值传递。构造完成后,参数可能会从堆栈中弹出,使Foo对象留下对垃圾数据的引用。我的理解在这里可能是错的,但我认为这是有效的。

有没有理由这样做?我用GCC ARM编译器,专有的TI ARM编译器和MSVC编译了这段代码,但没有任何警告或错误。我不能为我的生活找到一个有意义的地方,但是当我不同意三个编译器时,我通常对自己没有多少信心。

我完全在这里吃午饭吗?是否有充分的理由这样做,如果没有,编译器是否有理由无法检测到这一点?

0 个答案:

没有答案