🗂
C++BuilderでLambda式を使ってみた
基本形
CLANGコンパイラだけです。ラムダ式はClassicコンパイラ非対応。
// 基本形(何も処理しない関数オブジェクト)
auto func1 = [](){};
引数をとる
// 引数a,bを加算した値を返却する
auto plus = [](int a, int b){ return a+b;};
printf("単純実行=%d\n", plus(1,2));
printf("宣言と同時に実行=%d\n", [](int a, int b){ return a+b;}(1,2)); // こういう使い方も可能
関数外の変数をキャプチャ(コピー)する
int a = 1;
int b = 2;
auto func2 = [=](){ a++; return a+b; }; // a=1 → a=2
printf("func2=%d\n", func2()); // "4"
printf("a=%d, b=%d\n", a, b); // "a=1, b=2" (aは1のまま)
関数外の変数をキャプチャ(参照)する
int a = 1; // この値がLambda式内で変更される
int b = 2;
auto func3 = [&](){ a++; return a+b; }; // a=1 → a=2
printf("func3=%d\n", func3()); // "4"
printf("a=%d, b=%d\n", a, b); // "a=2, b=2" (aが2に書き換わっている)
Discussion