使用C 11中的lambdas值

Using values from lambdas in C++ 11

本文关键字:lambdas 中的 使用      更新时间:2023-10-16

可能的重复:
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末尾的额外()

所以,最后,lambda是这个

[](){}

或此

[](){}()

[](){}定义了临时的lambda函数,最终的 ()调用其 operator()(即函数调用操作员)=>>>>您正在定义(临时)lambda并将其称为现场。/p>

您可以更好地"看到"它

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

lambda函数是 [](){}。当您在其后添加括号时,它将移动lambda函数。

编写[](){},您只需声明该功能即可。这使您能够使用诸如auto my_lambda = [](){}之类的东西存储它,以便以后致电my_lambda()

呼叫操作员将立即执行lambda。

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