如何禁用隐式lambda变量捕获?
例如,如果我有一个lambda正在对数组中的每个条目进行调用,而且我不想捕获任何变量,我如何禁用隐式捕获?我更喜欢使用明确的捕获列表,因为这意味着我只是在抓取我认为我正在抓的东西。
结果,我对[]捕获的工作方式大错特错。为了防止任何人在将来发现这一点,除了上面我(被误导的)问题的公认答案之外,这里还有一些有希望的帮助信息。
捕获列表可以按以下方式传递:
[a,&b],其中a是通过复制捕获的,b是通过引用捕获的。[this]通过引用捕获当前对象(*this)[&]通过引用捕获在lambda正文中使用的所有自动变量,如果存在引用,则捕获当前对象。[=]通过复制捕获lambda正文中使用的所有自动变量,并通过引用捕获当前对象。[]什么也抓不到如果变量没有自动存储时间(即它不是局部变量,或者是静态的或线程本地的),或者如果它不是odr-在lambda的主体中使用,则可以使用它而不被捕获。
来源:http://en.cppreference.com/w/cpp/language/lambda
换句话说,如果您想禁用隐式捕获,只需使用和空一组括号[]。
发布于 2017-05-24 18:48:52
唯一的“隐式捕获”发生在作用域中的静态和全局变量。没有办法摆脱这一切。
https://stackoverflow.com/questions/44166225
复制相似问题