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

时间:2012-10-28 15:57:13

标签: c++ lambda c++11

  

可能重复:
  Parentheses at the end of a C++11 lambda expression

#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输入一个输入,我用这个lambda直接写入j,但我的编译器抱怨这个lambda生成一个未使用的如果我不将额外的()放在lambda的末尾,那就是值。

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

[](){}

或者

[](){}()

3 个答案:

答案 0 :(得分:5)

[](){}定义一个临时lambda仿函数,最后()调用它的operator()(即函数调用运算符)=&gt;你正在定义一个(临时的)lambda并在现场调用它。

你可以更好地“看到”

([](){})()
 ^^^^^^ ^^ 
   ||    invokes the "function call operator"
 lambda definition

答案 1 :(得分:4)

lambda函数是[](){}。在它之后添加括号时,它会执行lambda函数。

[](){},您只需声明该函数。这使您能够使用auto my_lambda = [](){}之类的内容存储它,以便稍后调用my_lambda()

答案 2 :(得分:3)

调用操作符将立即执行lambda。

int x = [] { return 5; }(); // x == 5