【问题标题】:What is the default capture of a lambda?什么是 lambda 的默认捕获?
【发布时间】:2018-03-11 11:01:06
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ c++11 lambda


    【解决方案1】:

    什么是捕获默认值?

    =&

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

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

    是的,但前提是您实际使用它(直接或通过访问类成员)。

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

    【讨论】:

    • 为什么叫默认?如果我们不指定任何内容,它是否会隐式添加到 lambda 中?
    • @MistyD 查看编辑。您还可以在“说明 - 捕获”下阅读说明 here
    • 感谢您的澄清。你能告诉我你所说的自动变量是什么意思吗?
    • @MistyD 在函数范围(而不是类或命名空间范围)声明的一个。
    猜你喜欢
    • 2021-04-07
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多