Lambda被引用捕获并在广告位中使用

Dav*_*rcz 5 c++ c++14

我有与此类似的C ++ 14代码:

void C::f() {
  int& ref = this->x;
  auto lb = [&ref]() {
    /* do stuff with "ref" */
  };
  if (foobar) {
    // call lb when signal fires. 
    connect(object, &D::signal, [&lb]() {
      lb();
    });
  } else {
    lb();
  }
}
Run Code Online (Sandbox Code Playgroud)

我知道到我使用时lb,它this仍然有效。但是reflb。上面的代码有悬挂的参考吗?

我发现了类似的问题(在这里那里,...),但我无法得出结论。

mol*_*ilo 7

lb 具有自动存储功能,因此当此函数返回时,对其的引用将无效。

的有效性ref取决于的生存期*this
(lambda不是ref通过引用捕获变量,而是在捕获对引用对象的ref引用。)