lambda的默认捕获是什么?

时间:2018-03-11 11:01:07

标签: c++ c++11 lambda

我正在阅读一篇文章,其中说明了以下内容

  

如果有的话,可以隐式捕获当前对象(* this)   捕获默认值存在。如果隐式捕获,它始终是   通过引用捕获,即使捕获默认值为=。

我很难理解上述陈述 - 什么是捕获默认值?这是否意味着如果我使用=作为捕获(这意味着在当前范围内复制变量),它会隐式地将this添加到捕获中,从而允许我使用this

1 个答案:

答案 0 :(得分:2)

  

什么是捕获默认值?

=&

以逗号分隔的捕获列表([]中包含的内容)可以选择以捕获默认值之一开头:=&(可能是列表中唯一的元素) )。如果存在capture-default并且您尝试在lambda中使用必须捕获的变量(自动变量或this),则capture-default将按值捕获该变量(= )或通过引用(&)。

  

这是否意味着如果我使用=作为捕获它会隐式地将this添加到捕获

是的,但只有在您实际使用它时(直接或通过访问类成员)。

捕获默认值不捕获任何变量,除非您实际在lambda中使用它们。