🗂

C++BuilderでLambda式を使ってみた

2023/06/04に公開

基本形

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に書き換わっている)

https://blogs.embarcadero.com/ja/lambda-expressions-for-beginners-ja/

Discussion