【发布时间】:2018-03-11 11:01:06
【问题描述】:
我正在阅读一篇文章,其中陈述了以下内容
当前对象 (*this) 可以被隐式捕获,如果 捕获默认值存在。如果隐式捕获,它总是 通过引用捕获,即使捕获默认值为 =。
我很难理解上述陈述 - 捕获默认值是什么?这是否意味着如果我使用= 作为捕获(这意味着在当前范围内复制变量)它会隐含地将this 添加到捕获中,从而允许我使用this?
【问题讨论】:
我正在阅读一篇文章,其中陈述了以下内容
当前对象 (*this) 可以被隐式捕获,如果 捕获默认值存在。如果隐式捕获,它总是 通过引用捕获,即使捕获默认值为 =。
我很难理解上述陈述 - 捕获默认值是什么?这是否意味着如果我使用= 作为捕获(这意味着在当前范围内复制变量)它会隐含地将this 添加到捕获中,从而允许我使用this?
【问题讨论】:
什么是捕获默认值?
= 或 &。
逗号分隔的捕获列表(包含在[] 中的内容)可以选择以捕获默认值之一开头:= 或&(可能是列表中的唯一元素)。如果存在默认捕获并且您尝试在 lambda 中使用必须捕获的变量(自动变量或this),则捕获默认将按值(=)或通过引用捕获该变量(&)。
这是否意味着如果我使用
=作为捕获,它会隐含地将this添加到捕获中
是的,但前提是您实际使用它(直接或通过访问类成员)。
除非您在 lambda 中实际使用它们,否则捕获默认值不会捕获任何变量。
【讨论】: