【发布时间】:2021-11-12 17:15:11
【问题描述】:
int n;
int main()
{
[](){ n = 0; }(); // clang says "ok"
int m;
[](){ m = 0; }(); // clang says "not ok"
}
我只是想知道:
如果 lambda 没有捕获任何内容,是否允许按照 C++ 标准访问全局变量?
【问题讨论】:
-
我会假设是这样,因为您可以在不捕获它们的情况下使用其他全局事物(函数和类型)。想象一下,如果您必须捕获 C++ 算法函数(例如
std::find)才能从 lambda 中使用它们。 -
en.cppreference.com/w/cpp/language/lambda 说了一些关于
capture-default的事情。我无法详细弄清楚它的作用。 -
如果您考虑一下,lambda 只是使用函数运算符定义
struct的捷径。局部变量不在struct成员函数的范围内,但全局变量在。 -
全局变量无法被捕获。
-
@cpplearner "无法捕获全局变量。"?有参考吗?
标签: c++ c++11 lambda global-variables standards