在C++ 11中使用lambdas中的值

axi*_*xis 2 c++ lambda c++11

可能重复:
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);
}
Run Code Online (Sandbox Code Playgroud)

我几乎得到了关于lambda如何工作的所有内容,我的最后一个问题是关于为什么我需要上面代码中报告的最后几个括号.

lambda的蓝图是

[](){}
Run Code Online (Sandbox Code Playgroud)

另外,我在这里通过引用为我的lambda输入一个输入,我正在j用这个lambda 直接写入,但我的编译器抱怨这个lambda生成一个未使用的值,如果我不把额外的东西()放在最后兰达的.

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

[](){}
Run Code Online (Sandbox Code Playgroud)

或这个

[](){}()
Run Code Online (Sandbox Code Playgroud)

Mat*_*lia 5

[](){}定义了一个临时lambda仿,最终()调用其operator()(即函数调用操作符)=>要定义(临时)的λ,把它在现场.

你可以更好地"看到"它

([](){})()
 ^^^^^^ ^^ 
   ||    invokes the "function call operator"
 lambda definition
Run Code Online (Sandbox Code Playgroud)