在C++中,lambda函數是一種匿名函數,它可以用于編寫簡潔的、臨時的函數。它的語法如下:
[捕獲列表] (參數列表) -> 返回類型 { 函數體 }
其中,捕獲列表是可選的,用于捕獲外部變量。參數列表和返回類型也是可選的,可以根據需要省略。
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
需要注意的是,lambda函數在編譯時會生成一個匿名的函數對象,因此可以使用auto關鍵字來自動推導其類型。另外,lambda函數還可以通過mutable關鍵字來改變捕獲的變量。例如:
int x = 5;
auto func = [x]() mutable { x++; std::cout << "x: " << x << std::endl; };
func(); // 輸出x: 6
總的來說,lambda函數在C++中提供了一種簡潔而靈活的函數編寫方式,可以方便地在需要臨時定義函數的地方使用。