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

时间:2017-05-24 18:39:14

标签: c++ c++11 lambda

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

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

事实证明,我对[]抓取工作的方式存在深刻的误解。如果以后有人发现这一点,除了上面我(误导)问题的接受答案之外,还有一些希望有助于提供信息。

  

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

     
      
  • [a,&b]其中a由副本捕获,b通过引用捕获。
  •   
  • [this]通过引用
  • 捕获当前对象(* this)   
  • [&]通过引用捕获lambda主体中使用的所有自动变量,如果存在则通过引用捕获当前对象
  •   
  • [=]通过复制和当前对象(如果存在)捕获lambda正文中使用的所有自动变量
  •   
  • []没有捕获任何内容
  •   
     

如果变量没有自动存储持续时间(即它不是局部变量,或者它是静态或线程局部的),或者它在lambda的主体中没有使用,则可以使用变量而不被捕获。

     

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

换句话说,如果要禁用隐式捕获,只需使用并清空括号[]

1 个答案:

答案 0 :(得分:4)

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