前回からの差分紹介
【ローカル変数の宣言構文】
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)