ラムダ式

lambda.png

C++におけるラムダ式とは無名関数のことです

最小のラムダ式

[](){};

引数は省略かのうなのでもっと小さく書くとこうなります
[]{};

ラムダ式の文法

[] ラムダキャプチャー ラムダ式の中で使う変数があったらここで指定する
() パラメータ定義節 関数の引数があったらここに定義を書く
{} 複合ステートメント ここに関数の処理内容を書く
() 関数呼び出し式 実際に渡す引数の値をここに書いて関数を呼び出すときの記述を書く

ラムダ式を変数に入れて呼び出す

 auto func = []{ std::cout<<"Hello world"<<std::endl;};
        func ();//ラムダ式の呼び出し

ここでいうfuncという変数は関数ポインタのような扱いになります

引数つきのラムダ式

 [](string const & str) // 引数の定義
        {       // 関数本体
                cout << str << endl;
        }
        ( "I am Argument!");    // 関数呼び出しと引数

戻り値つきのラムダ式

auto b = [] () -> float { return 3.14; } (); //明示的に戻り値を定義
cout << b << endl;

戻り値を明示的に書かない方法もあります
auto a = [] { return 0;} (); // 戻り値を推測させる
cout << a << endl;//これでもok だけど勝手にintになったりする

ラムダ式の中で使いたい変数があるとき

string s1 = "I am s1";
    [&] { s1 = "Overwrite s1!"; } ();
    //[&s1] { s1 = "Overwrite s1!"; } ();//これでも同じ効果です
    cout << s1 << endl;

ラムダ式を関数の引数として渡す

#include <iostream>
template<typename Func>
void f(Func func){
        func();
}
int main(int argc, char const* argv[])
{
        f( []{ std::cout<<"Hello world"<<std::endl;} );
        return 0;
}

サポートサイト Wikidot.com