ここでは、C++ ラムダ式の使用について説明します。ラムダ式を使用するには、コマンドライン・オプションの -std または /Qstd を使用して、c++0x を指定する必要があります。
Windows* システム: /Qstd=c++0x
Linux* システム: -std=c++0x
ラムダ式は、[lambda-captureopt] によりコードに導入されます。自動記憶域期間に、式でローカル変数や参照がキャプチャーされない場合は、lambda-captureopt を空にして、[] を接頭部としてそのまま残しておくことができます。
例:
[](int x) {return x%3==0;}
上記のラムダ式は、unique() 式と同じです。ここで、unique は秘密識別子で、次のようにコンパイラーによって生成され定義されます。
class unique {
public:
bool operator()(int x ) const {return x%3==0;}
};
ラムダ・パラメーター宣言 が ラムダ接頭部 の後に続きます。パラメーター・リストが空の場合は、括弧を省略できます。例えば、次のラムダ式は等価です。
[] {return rand();}
[]() {return rand();}
ラムダ式の本体は複合文です。ラムダ式の戻り値の型 T は、->T をパラメーター・リストの後に記述することにより指定できます。
例えば、次のラムダ式は等価です。
[](int x) {return x%3==0;}
[](int x) -> bool {return x%3==0;}
[](int x) -> bool {if( x%3==0 ) return true; else return false;}
戻り値の型が明示的に指定されていない場合は、本体が {return expression;} 形式でない限り、void 型です。この形式を持つ場合は、戻り値の型は式の型になります。次の例について考えてみます。
[](int x) { if (x % 3 == 0) return true; else return false; }
void を返す関数からは boolean 値を返せないため、この式は誤りです。