从这个问题的答案中,作为一个例子,这是一个计算元素总和的代码std::vector:
std::for_each(
vector.begin(),
vector.end(),
[&](int n) {
sum_of_elems += n;
}
);
Run Code Online (Sandbox Code Playgroud)
我知道 lambda函数只是无名函数.
我理解 lambda函数语法,如下所述.
我不明白为什么lambda函数需要捕获列表,而普通函数则不需要.
GCC似乎错误地通过lambda函数中的引用捕获全局变量,即使它们被指定为"按值捕获".此代码将编译并打印"a = 9":
#include <iostream>
int a = 10;
int main()
{
[=]() { a = 9; } ();
std::cout << "a = " << a << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
虽然这段代码不会编译:
#include <iostream>
int main()
{
int a = 10;
[=]() { a = 9; } (); // error: assignment of member 'main()::<lambda()>::a' in read-only object
std::cout << "a = " << a << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但显式捕获全局值然后分配给它会产生错误:
#include <iostream>
int a = 10;
int main()
{
[a]() …Run Code Online (Sandbox Code Playgroud)