Lambda函数

C++ 中的 Lambda 函数

在C++11及以后版本中,Lambda函数(或称为匿名函数)是一种内联函数,可以在函数内部或任何其他地方定义,甚至可以立即传递给其他函数。
Lambda函数的语法更加灵活,允许捕获变量和处理复杂的行为,非常适合在需要简单函数的场景中使用。

语法

[capture](parameters) -> return_type {
    // 函数体
}
  • capture(捕获列表):指定 Lambda 函数可以捕获哪些变量。可以是[](不捕获任何变量)、[&](捕获所有变量通过引用)、[=](捕获所有变量通过值)等。
  • parameters(参数列表):与普通函数一样,定义传递给 Lambda 函数的参数。
  • return_type(返回类型):指定返回值的类型(可以省略,编译器会自动推断)。
  • 函数体:Lambda 函数的逻辑实现。

捕获列表的详细说明:

  • [ ]:不捕获任何外部变量。
  • [&]:通过引用捕获外部变量,可以修改它们的值。
  • [=]:通过值捕获外部变量,捕获的是它们的拷贝。
  • [&x, =y]:对x通过引用捕获,y通过值捕获。

使用示例

  1. 基本 Lambda 表达式:

    auto add = [](int x, int y) -> int {
        return x + y;
    };
    std::cout << add(3, 4) << std::endl;  // 输出 7
    

    在这个例子中,定义了一个 Lambda 函数add,它接受两个整数并返回它们的和。

  2. 捕获外部变量:

    int a = 5, b = 3;
    auto add = [a, b]() {
        return a + b;
    };
    std::cout << add() << std::endl;  // 输出 8
    

    在这个例子中,外部变量ab被捕获并通过值传递给 Lambda 函数。

  3. 通过引用捕获:

    int x = 10;
    auto modify = [&x]() {
        x += 5;
    };
    modify();
    std::cout << x << std::endl;  // 输出 15
    

    在这里,Lambda 函数通过引用捕获x,并在函数内部修改了它的值。

Lambda 表达式的类型

当你定义一个 Lambda 表达式时,编译器会为该表达式生成一个隐式的类,这个类的类型是唯一的,且无法直接引用。

每个 Lambda 表达式的类型都是不同的,即使它们的内容完全相同

示例:

auto lambda1 = [](int x) { return x + 1; };
auto lambda2 = [](int x) { return x + 1; };
// lambda1 和 lambda2 是不同的类型

操作符()

生成的 Lambda 类型会定义一个 operator(),使其可以像函数一样被调用。这个调用操作符可以接受参数并返回结果。

示例:

auto lambda = [](int a, int b) { return a + b; };
int result = lambda(3, 4); // 调用 lambda

总结

  • Lambda 函数是 C++ 中用于创建匿名函数的特性,通常用于内联、简化代码。
  • 它的强大之处在于可以捕获外部变量,支持按值或引用捕获,以及自动推导返回类型。
    是的,Lambda 表达式在 C++ 中被视为一个独特的类型。具体来说,Lambda 表达式的类型是一个匿名的、不可命名的类,这个类定义了调用操作符 operator()。以下是对 Lambda 的类型特性及其相关概念的详细解释:
posted @   牛马chen  阅读(19)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示