C ++ラムダ関数で
ラムダは、C ++で導入された官能プログラミングの概念、の関数である。11、C ++での近代的な重要な特性で。
いわゆるラムダ関数は匿名関数の構文構造であります:
[capture list] (params) mutable noexcept -> return type { body }
- キャプチャリスト:キャプチャリスト
- params:パラメータリスト
- 可変:値の取得により、変数を変更するかどうか
- noexcept:例外をスローするかどうか
- - >戻り値の型:戻り値の型
- ボディ:関数本体
のみキャプチャリストと関数本体が存在しなければなりません[capture list] { body }
。
基本コンセプト
C ++でのラムダ関数はまた、ラムダ式、閉鎖(クロージャ)と呼ばれるオブジェクトによって生成されたラムダ式と呼ばれます。
すべての機能は、実際にラムダ閉鎖クラスに対応するように、C ++は、関手のラムダ関数を実装するクラスです。
なぜキーワードmutable
実際には、単に閉鎖クラスにラムダ関数の対応を述べたが、その呼び出しインターフェースはデフォルトでconst
必要性が明示的に変更可能なキーワードを追加するので、。
これをキャプチャ
:ラムダ関数は、クラスのメンバ関数でキャプチャする場合ので、あなたが直接メンバ変数をキャプチャすることはできませんが、これをキャプチャすることができ、非静的ローカル変数をキャプチャすることができます[this] (params) { body }
。
INITキャプチャ
C ++ 14を導入INIT捕捉新しいキャプチャモードを、移動セマンティクスを取り込むことができ、直接、携帯捕獲セマンティクスのようなメンバ変数を、捕捉することができます。
[up = std::make_unique()] (params) { body }
C ++では、だけ自分の数子クラスを記述、または使用bind
この構文をシミュレートする機能を。