2

重複の可能性:
C++11 のラムダ式とは?

C++ で次の式を見つけました (C++11 の最もエキサイティングな機能の 1 つです)。

int i = ([](int j) { return 5 + j; })(6);

なぜ11を取得するのですか?この表現を説明してください。

4

1 に答える 1

13

[](int j) { return 5 + j; }intを引数として取り、それを呼び出すラムダですj。この引数に 5 を加算して返します。式の(6)後にラムダがすぐに呼び出されるため、6 と 5 を加算しています。

これは、次のコードとほぼ同等です。

int fn(int j) {
    return 5 + j;
}

int i = fn(6);

もちろん、名前付き関数を作成しないことを除いて。スマート コンパイラは、おそらくラムダをインライン化し、定数の折りたたみを行うため、単純にint i = 11;.

于 2012-10-07T01:42:04.837 に答える