C++ 使用 Lambda 實現(xiàn)匿名函數(shù)

匿名函數(shù)是指不需要聲明和定義的函數(shù),匿名函數(shù)僅需要在使用時候進行創(chuàng)建。匿名函數(shù)的 結(jié)構(gòu)如下:

[capture](parameters)->return-type{body}

capture

  • []:未定義變量,不允許在函數(shù)體內(nèi)使用任意外部臨時變量,全局變量可以使用;
  • [x, &y]:x 按值捕獲,y 按引用捕獲;
  • [&]:外部臨時變量都按引用捕獲;
  • [=]:外部臨時變量都按值捕獲;
  • [&, x]:x 按值捕獲,其它臨時變量按引用捕獲;
  • [=, &x]:x 按引用捕獲. 其它臨時變量按值捕獲。
示例

[]:未定義變量,不允許在函數(shù)體內(nèi)使用任意外部臨時變量,全局變量可以使用

int x = 0;
int main() {
    int y = 0;
    auto func = [] {
        x = 1;
        // y = 1; 錯誤
    };
    func();
    std::cout << x << ' ' << y << std::endl;
    return 0;
}
// 輸出:1 0

[x, &y]:x 按值捕獲,y 按引用捕獲

int x = 1, y = 1;
auto func = [x, &y] {
    // x = 1; 錯誤
    y = x + 2;
};
func();
std::cout << x << ' ' << y << std::endl;
// 輸出:1 3

[&]:外部臨時變量都按引用捕獲

int x = 1, y = 1;
auto func = [&] {
    x = 2;
    y = 2;
};
func();
std::cout << x << ' ' << y << std::endl;
// 輸出:2 2

[=]:外部臨時變量都按值捕獲

int x = 1, y = 1;
auto func = [=] {
    // x = 2; 錯誤
    return x + y;
};
std::cout << func() << std::endl;
// 輸出:2

[&, x]:x 按值捕獲,其它臨時變量按引用捕獲

int x = 1, y = 1;
auto func = [&, x] {
    // x = 2; 不允許
    y = 2;
};
func();
std::cout << x << ' ' << y << std::endl;
// 輸出:1 2

[=, &x]:x 按引用捕獲. 其它臨時變量按值捕獲

int x = 1, y = 1;
auto func = [=, &x] {
    x = 2;
    // y = 2; 不允許
};
func();
std::cout << x << ' ' << y << std::endl;
// 輸出:2 1

參數(shù)及返回值

int main() {
    auto max = [](int a, int b) -> int {
        return a > b ? a : b;
    };
    std::cout << max(1, 2) << std::endl;
    return 0;
}

匿名函數(shù)傳遞

#include <iostream>

void handle(const std::function<void(int, std::string)> &callback) {
    callback(200, "success");
}

int main() {
    auto callback = [](int status, const std::string &msg) {
        std::cout << "status: " << status << ", " + msg << std::endl;
    };
    handle(callback);
    return 0;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容