如何禁用隐式 Lamba 变量捕获?

Phi*_*uil 1 c++ lambda c++11

如何禁用隐式 lambda 变量捕获?

例如,如果我有一个正在对数组中的每个条目进行调用的 lambda,并且我不想捕获任何变量,那么如何禁用隐式捕获?我更喜欢使用显式捕获列表,因为这意味着我只抓取我认为我正在抓取的内容。


事实证明,我对捕获的工作原理完全错误[]。以防万一将来有人发现这一点,除了上面我的(误导的)问题的已接受答案之外,这里还有一些希望有帮助的信息。

捕获列表可以通过如下方式传递:

  • [a,&b]其中 a 通过复制捕获,b 通过引用捕获。
  • [this]通过引用捕获当前对象 (*this)
  • [&]通过引用捕获 lambda 主体中使用的所有自动变量,并通过引用捕获当前对象(如果存在)
  • [=]通过复制捕获 lambda 主体中使用的所有自动变量,并通过引用捕获当前对象(如果存在)
  • []什么也没捕获

如果变量没有自动存储持续时间(即它不是本地变量或者它是静态变量或线程本地变量)或者如果它没有在 lambda 主体中使用 odr,则可以在不捕获的情况下使用该变量。

来源: http: //en.cppreference.com/w/cpp/language/lambda

换句话说,如果您想禁用隐式捕获,只需使用空括号即可[]

Wag*_*ota 5

唯一的“隐式捕获”发生在作用域中的静态变量和全局变量上。并且没有办法摆脱这个。