C++ でのラムダ式の使用について

ここでは、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 値を返せないため、この式は誤りです。

例外指定

ラムダ式には、パラメーター・リストの後と戻り値の型の指定の前に例外指定が含まれることがあります。例外指定がある場合は、パラメーター・リストが必要です。

次のラムダ式は、例外をスローしないことを指定します。

[](int x) throw() -> bool {return x%3==0;}

[]() throw() {return rand();}

関連情報