2

重複の可能性:
C++11ラムダ式の最後の括弧

#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);
}

私はラムダがどのように機能するかについてほとんどすべてを理解しています。私の最後の質問は、上記のコードで報告されているような最後の2つの括弧が必要な理由についてです。

ラムダの青写真は

[](){}

また、ここで参照によりラムダの入力を取得しています。このラムダを直接書き込んでいますが、最後jに余分な値を入れないと、このラムダが未使用の値を生成するという事実についてコンパイラが文句を言います。()ラムダの。

だから、結局、ラムダはこれです

[](){}

またはこれ

[](){}()

4

3 に答える 3

5

[](){}一時的なラムダファンクターを定義し、final()はそのoperator()(つまり関数呼び出し演算子)を呼び出します=>(一時的な)ラムダを定義してその場で呼び出します。

あなたはそれをよりよく「見る」かもしれません

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

ラムダ関数は[](){}です。その後に括弧を追加すると、ラムダ関数が実行されます。

と書く[](){}と、関数を宣言するだけです。auto my_lambda = [](){}これにより、後で呼び出すために、のようなもので保存することができますmy_lambda()

于 2012-10-28T15:58:35.080 に答える
3

呼び出し演算子はすぐにラムダを実行します。

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