C ++ 11:ラムダ式の使用

ラムダ式の一般的な形式:

 [キャプチャリスト(パラメータリスト) - > 戻り型{関数本体}。 

ここで、キャプチャリスト(キャプチャリスト)リスト(通常は空の)ローカル変数が定義されているラムダです。

戻り値の型、パラメータリスト、および任意の正常な機能の身体機能と同様に、それぞれのタイプを返し、関数パラメータリストの本体。

しかし、通常の関数とは異なり、ラムダは、指定された戻り値の型の末尾に戻って設定する必要があります。

 

また、私は、パラメータリストを無視して、タイプを返しますが、常にリストが含まれており、関数本体をキャプチャする必要がありますすることができます:

オートF = [] { 返す 42 }

この例では、呼び出し可能オブジェクトF、引数なしで、42の値を返す定義します。

 

呼び出さ:正常な機能と一致。

COUT << F()<< ENDL。

戻り値の型、それらの機能に応じて、ラムダ推論戻り型コードの場合を無視し、関数はそののみreturnステートメント、式から推測戻り型の戻り型である場合。そうでない場合は、空の戻り値の型。

 

使用条件:

「参考キャプチャは、たとえば、必要がある場合もあり、我々はbiggies機能は、出力データに使用されているのostreamへの参照を受け取り、区切り文字として文字を受け入れたい場合があります:。」

無効 biggies(ベクトル< 文字列 >&言葉、
                  ベクトル < 文字列 > :: size_typeのSZ、
                  ostreamに&OS = COUT、char型の C = '  ' 
{ 
     // OSに印刷するための印刷枚数文
    、for_each(words.beginを() words.end()、
                  [&OS、C(CONST  文字列&S)S {OS << << C;});           
}

唯一の方法は、キャプチャ、OSその参照(またはOSへのポインタ)を捕獲することであるように、我々は、のostreamをコピーすることはできません。

注意:参照変数をキャプチャする場合、ラムダがある場合に、変数は、実行を確認する必要があります

 

一般的に、我々は、キャプチャによって引き起こされる潜在的な問題を回避するために、キャプチャしたデータの量を最小限に抑える必要があります。そして、可能な場合は、キャプチャポインタまたは参照を避けるべきです。

おすすめ

転載: www.cnblogs.com/2018shawn/p/11361053.html