美文网首页
C++ 使用 Lambda 实现匿名函数

C++ 使用 Lambda 实现匿名函数

作者: ImWiki | 来源:发表于2021-07-07 00:57 被阅读0次

匿名函数是指不需要声明和定义的函数,匿名函数仅需要在使用时候进行创建。匿名函数的 结构如下:

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

capture

  • []:未定义变量,不允许在函数体内使用任意外部临时变量,全局变量可以使用;
  • [x, &y]:x 按值捕获,y 按引用捕获;
  • [&]:外部临时变量都按引用捕获;
  • [=]:外部临时变量都按值捕获;
  • [&, x]:x 按值捕获,其它临时变量按引用捕获;
  • [=, &x]:x 按引用捕获. 其它临时变量按值捕获。
示例

[]:未定义变量,不允许在函数体内使用任意外部临时变量,全局变量可以使用

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

参数及返回值

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

匿名函数传递

#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;
}

相关文章

  • python常见高级用法

    Lambda匿名函数 匿名函数就是没有定义函数名称,可以实现函数某些简单功能 匿名函数格式: lambda par...

  • C++ 使用 Lambda 实现匿名函数

    匿名函数是指不需要声明和定义的函数,匿名函数仅需要在使用时候进行创建。匿名函数的 结构如下: capture []...

  • 18/4 lambda表达式

    比较函数指针、函数符和lambda函数 cout_if() 在c++中对于接受函数指针或函数符的函数,可使用匿名函...

  • c++基础(lambda)

    在 c++ 中 lambda 函数有点类似匿名函数,怎么解释呢,我们无需定义一个函数结构随后再去使用这个函数。而是...

  • C++使用Lambda函数实现多线程

    转帖: C++使用Lambda函数实现多线程thread - 传递引用参数

  • Python中的lambda用法总结

    lambda是匿名函数,使用lambda可节省函数名称。 lambda argument_list: expres...

  • lambda匿名函数

    匿名函数 python 使用 lambda 来创建匿名函数。 lambda只是一个表达式,函数体比def简单很多。...

  • python函数

    匿名函数 python 使用 lambda 来创建匿名函数。 lambda只是一个表达式,函数体比def简单很多。...

  • Python之lambda表达式

    ---Python之lambda表达式(创建匿名函数) Python允许使用lambda关键字来创建匿名函数。 先...

  • python lambda函数

    lambda 是匿名函数 用来表达简单的函数使用lambda函数应该注意的几点: lambda定义的是单行函数,...

网友评论

      本文标题:C++ 使用 Lambda 实现匿名函数

      本文链接:https://www.haomeiwen.com/subject/fgbnultx.html