【发布时间】:2017-05-24 18:39:14
【问题描述】:
如何禁用隐式 lambda 变量捕获?
例如,如果我有一个正在对数组中的每个条目调用的 lambda,并且我不想捕获任何变量,我该如何禁用隐式捕获?我更喜欢使用显式捕获列表,因为这意味着我只抓取我认为我正在抓取的内容。
原来我对 [] 捕获的工作方式大错特错。以防万一有人在将来发现这个问题,除了上面对我的(被误导的)问题的接受答案之外,这里还有一些有希望的帮助信息。
捕获列表可以如下传递:
[a,&b]其中 a 是通过副本捕获的,b 是通过引用捕获的。[this]通过引用捕获当前对象(*this)[&]通过引用捕获 lambda 主体中使用的所有自动变量,如果存在则通过引用捕获当前对象[=]通过复制捕获 lambda 主体中使用的所有自动变量,并通过引用捕获当前对象(如果存在)[]什么也捕捉不到如果一个变量没有自动存储持续时间(即它不是一个局部变量,或者它是静态的或线程局部的),或者如果它不是在 lambda 的主体中使用 odr,则可以在不被捕获的情况下使用它。
换句话说,如果你想禁用隐式捕获,只需使用并清空一组括号[]。
【问题讨论】:
-
什么“隐式捕获”?? Afaik 没有这样的事情。
-
您需要提供一些代码来解释您的意思:lambdas 的默认行为是不捕获任何局部变量,也不可能不捕获全局变量。
-
@JesperJuhl 在类型定义方面有“隐式捕获”之类的东西,但不清楚这就是 OP 所说的......
-
您是否尝试过不使用 lambda 中的变量?