タグ

c++とlambdaに関するtyosuke2011のブックマーク (2)

  • ラムダオブジェクトを static 変数で保持する時の注意 - C++でゲームプログラミング

    Lingr の C++ 部屋で話題になったのですが、参照キャプチャしたラムダを static 変数で保持するのは未定義の動作になることがあるので注意しましょうという話。 さて、話題になっていたのは次のようなコードです。 void func(int const& i){ static auto f = [&]{ std::cout << i << std::endl; }; f(); } func(1); // => 1 func(2); // => 1 呼び出した f() は両方共 1 が出力されます。 ここで引数を int に変えてみるとどうでしょう。 // 引数を int に変更 void func(int i){ static auto f = [&]{ std::cout << i << std::endl; }; f(); } // 最初のコードと結果が違う func(1); /

    ラムダオブジェクトを static 変数で保持する時の注意 - C++でゲームプログラミング
  • ラムダ式 [N2927] - cpprefjp C++日本語リファレンス

    このページはC++11に採用された言語機能の変更を解説しています。 のちのC++規格でさらに変更される場合があるため関連項目を参照してください。 概要 「ラムダ式(lambda expressions)」は、簡易的な関数オブジェクトをその場で定義するための機能である。 この機能によって、「高階関数(関数を引数もしくは戻り値とする関数)」をより使いやすくできる。 auto plus = [](int a, int b) { return a + b; }; int result = plus(2, 3); // result == 5 ここでは、[](int a, int b) { return a + b; }というコードがラムダ式に当たる。このラムダ式は、「int型のパラメータを2つとり、それらを足し合わせたint型オブジェクトを返す関数オブジェクト」を定義している。ここでは戻り値の型を

  • 1