首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何禁用隐式lamba变量捕获?

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

Stack Overflow用户
提问于 2017-05-24 18:39:14
回答 1查看 407关注 0票数 0

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

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

结果,我对[]捕获的工作方式大错特错。为了防止任何人在将来发现这一点,除了上面我(被误导的)问题的公认答案之外,这里还有一些有希望的帮助信息。

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

  • [a,&b],其中a是通过复制捕获的,b是通过引用捕获的。
  • [this]通过引用捕获当前对象(*this)
  • [&]通过引用捕获在lambda正文中使用的所有自动变量,如果存在引用,则捕获当前对象。
  • 如果存在,[=]通过复制捕获lambda正文中使用的所有自动变量,并通过引用捕获当前对象。
  • []什么也抓不到

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

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

换句话说,如果您想禁用隐式捕获,只需使用和空一组括号[]

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-24 18:48:52

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44166225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档