C++のラムダ式とはどのような機能か
C++においてラムダ関数とは、簡潔で一時的な関数を記述する匿名関数です。構文は次のとおりです。
(引数リスト)-> 戻り値タイプ {
処理内容
}
キャプチャーリストは省略可能で、外部変数をキャプチャーするために使用します。引数リストおよび戻り値タイプも省略可能であり、必要に応じて省略できます。
ラムダ関数の主な用途は次の通りです。
- 関数オブジェクトとして: lambda 関数は通常の関数のように呼び出され、パラメータを渡すことができます。たとえば:
auto sum = [](int a, int b) { return a + b; };
int result = sum(3, 4); // 结果为7
- 関数のパラメータとして:ラムダ関数は、他の関数の引数として渡すことができます。これは、単純な関数ロジックを渡す必要がある場合に非常に便利です。例:
void process(int x, int y, std::function<void(int)> func) {
int result = x + y;
func(result);
}
process(3, 4, [](int result) { std::cout << "Result: " << result << std::endl; });
- 戻り値として:ラムダ関数は他の関数の戻り値として利用できる。これは、条件に応じて異なる関数のロジックを返すために使用できる。例えば:
std::function<int(int)> getMultiplier(bool flag) {
if (flag) {
return [](int x) { return x * 2; };
} else {
return [](int x) { return x * 3; };
}
}
std::function<int(int)> multiplier = getMultiplier(true);
int result = multiplier(4); // 结果为8
- 外部変数をキャプチャする: ラムダ関数はリストをキャプチャすることで外部変数をキャプチャし、関数本体で使用できます。キャプチャリストは、値キャプチャや参照キャプチャなど、キャプチャ方法を指定できます。例:
int x = 5;
auto func = [x]() { std::cout << "x: " << x << std::endl; };
func(); // 输出x: 5
コンパイル時に匿名関数オブジェクトを生成することに留意してください。そのためautoキーワードを使用してその型を自動的に推論することができます。また、lambda関数はmutableキーワードを使用して捕捉された変数を変更することもできます。たとえば:
int x = 5;
auto func = [x]() mutable { x++; std::cout << "x: " << x << std::endl; };
func(); // 输出x: 6
ラムダ関数は、CPPにおいて、即座に定義する必要がある箇所に利用できる、簡素で柔軟な関数の書き方を提供しています。