c++中l(wèi)ambda函數(shù)的用法是什么

c++
小億
112
2023-11-09 12:00:40

在C++中,lambda函數(shù)是一種匿名函數(shù),它可以用于編寫簡(jiǎn)潔的、臨時(shí)的函數(shù)。它的語(yǔ)法如下:

[捕獲列表] (參數(shù)列表) -> 返回類型 { 函數(shù)體 }

其中,捕獲列表是可選的,用于捕獲外部變量。參數(shù)列表和返回類型也是可選的,可以根據(jù)需要省略。

lambda函數(shù)的用法主要有以下幾個(gè)方面:

  1. 作為函數(shù)對(duì)象:lambda函數(shù)可以像普通函數(shù)一樣被調(diào)用,并傳入?yún)?shù)。例如:
auto sum = [](int a, int b) { return a + b; };
int result = sum(3, 4); // 結(jié)果為7
  1. 作為函數(shù)參數(shù):lambda函數(shù)可以作為其他函數(shù)的參數(shù)傳遞。這在需要傳遞一個(gè)簡(jiǎn)單的函數(shù)邏輯時(shí)非常方便。例如:
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; });
  1. 作為返回值:lambda函數(shù)可以作為其他函數(shù)的返回值。這可以用于根據(jù)不同的條件返回不同的函數(shù)邏輯。例如:
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); // 結(jié)果為8
  1. 捕獲外部變量:lambda函數(shù)可以通過(guò)捕獲列表捕獲外部的變量,并在函數(shù)體中使用。捕獲列表可以指定捕獲的方式,如值捕獲、引用捕獲等。例如:
int x = 5;
auto func = [x]() { std::cout << "x: " << x << std::endl; };
func(); // 輸出x: 5

需要注意的是,lambda函數(shù)在編譯時(shí)會(huì)生成一個(gè)匿名的函數(shù)對(duì)象,因此可以使用auto關(guān)鍵字來(lái)自動(dòng)推導(dǎo)其類型。另外,lambda函數(shù)還可以通過(guò)mutable關(guān)鍵字來(lái)改變捕獲的變量。例如:

int x = 5;
auto func = [x]() mutable { x++; std::cout << "x: " << x << std::endl; };
func(); // 輸出x: 6

總的來(lái)說(shuō),lambda函數(shù)在C++中提供了一種簡(jiǎn)潔而靈活的函數(shù)編寫方式,可以方便地在需要臨時(shí)定義函數(shù)的地方使用。

0