2

可能重复:
C++11 lambda 表达式末尾的括号

#include <iostream>

int main(int argc, char* argv[])
{
    int j;
    [&](){j = 10;}(); // why I need the last rounded parentheses () and what is their purpose ?
    // ...
    return(0);
}

我几乎了解了 lambda 是如何工作的,我的最后一个问题是为什么我需要上面代码中报告的最后几个括号。

lambda 的蓝图是

[](){}

另外,我在这里通过引用为我的 lambda 输入一个输入,我直接j用这个 lambda 写入,但是我的编译器抱怨这样一个事实,即如果我不把额外的值放在()最后,这个 lambda 会生成一个未使用的值的拉姆达。

所以,最后,一个 lambda 是这个

[](){}

或这个

[](){}()

?

4

3 回答 3

5

[](){}定义了一个临时的 lambda 仿函数,最终调用()它的operator()(即函数调用运算符)=> 您正在定义一个(临时)lambda 并在现场调用它。

您可能会更好地“看到”它

([](){})()
 ^^^^^^ ^^ 
   ||    invokes the "function call operator"
 lambda definition
于 2012-10-28T16:00:15.450 回答
4

一个 lambda 函数是[](){}. 当您在其后添加括号时,它会执行 lambda 函数。

编写[](){},您只需声明函数。这使您能够将其与类似的东西一起存储,以auto my_lambda = [](){}供以后调用my_lambda()

于 2012-10-28T15:58:35.080 回答
3

调用运算符将​​立即执行 lambda。

int x = [] { return 5; }(); // x == 5
于 2012-10-28T15:58:12.223 回答