C++0x - Lambda Expressions and Closures(N2487)

前回からの差分紹介


【ローカル変数の宣言構文】
N2413(前回)

int ar[]   = {3, 1, 4};
int sum    = 0;
int factor = 2;

for_each(ar, ar + 3, <>(int value; &sum, factor) (sum += factor * value));

N2487(今回)
... : [ローカル変数名] (...)

int ar[]   = {3, 1, 4};
int sum    = 0;
int factor = 2;

for_each(ar, ar + 3, <>(int value) : [&sum, factor] (sum += factor * value));

Boost.Lambdaの場合

int ar[]   = {3, 1, 4};
int sum    = 0;
int factor = 2;

for_each(ar, ar + 3, sum += factor * _1);


【ローカル変数の参照方法】
C++0xの(現在提案されている)ラムダ式にはローカル変数を参照するための構文が3つある

<>(int value) : [&sum, factor] (sum += factor * value)
<&>(int value) : [factor] (sum += factor * value)
<=>(int value) : [&sum] (sum += factor * value)

上記の3つのラムダ式は全て同じ意味である<>は、ローカル変数の参照方法を全て明示的に指定する必要がある<&>は、ローカル変数の参照方法がデフォルトで"参照"になる。コピー渡しする場合は明示的に指定する<=>は、ローカル変数の参照方法がデフォルトで"コピー"になる。参照渡しする場合は明示的に指定する





N2487 - Lambda Expressions and Closures: Wording for Monomorphic Lambdas (Revision 2)


C++0x言語拡張まとめ