C++ lambda表达式

C++ lambda表达式

Lambda 表达式是 C++ 中的一个功能,它允许你创建匿名函数。Lambda 表达式的通用语法如下:

[capture](parameters) mutable -> return_type { body }

各部分的含义如下:

  1. capture:捕获列表,定义了从外部作用域捕获哪些变量以及如何捕获(按值或按引用)。
  2. parameters:参数列表,与普通函数的参数列表类似。
  3. mutable:如果使用了这个关键字,可以修改按值捕获的变量。
  4. return_type:返回类型,可以显式指定,也可以让编译器自动推断。
  5. body:函数体,包含了 lambda 表达式要执行的代码。

捕获列表(Capture)的几种形式:

  1. 不捕获任何外部变量

    []{ /* code */ }
    
  2. 按值捕获所有外部变量

    [=]{ /* code */ }
    
  3. 按引用捕获所有外部变量

    [&]{ /* code */ }
    
  4. 按值捕获特定变量

    [x]{ /* code */ }
    
  5. 按引用捕获特定变量

    [&x]{ /* code */ }
    
  6. 混合捕获模式

    [x, &y]{ /* code */ }
    
  7. 隐式捕获某些变量,显式捕获其他变量

    [=, &x]{ /* code */ }
    [&x, y]{ /* code */ }
    

例子与解释:

  1. 不捕获任何外部变量

    []{ return 42; }
    

    一个简单的 lambda,不使用任何外部变量,返回 42。

  2. 按值捕获外部变量

    int x = 1;
    auto l = [=]{ return x + 1; };
    

    这个 lambda 按值捕获 x,返回 x + 1 的结果。

  3. 按引用捕获外部变量并修改

    int x = 1;
    auto l = [&x]{ ++x; };
    

    按引用捕获 x 并在 lambda 内部对其进行修改。

  4. 具有参数的 lambda

    auto l = [](int a, int b){ return a + b; };
    

    一个接受两个整数参数并返回它们的和的 lambda。

  5. 可变 lambda(修改按值捕获的变量)

    int x = 1;
    auto l = [x]() mutable { return ++x; };
    

    mutable 关键字允许 lambda 修改按值捕获的变量。

  6. 带有显式返回类型的 lambda

    auto l = [](int a, int b) -> double { return (a + b) / 2.0; };
    

    一个计算平均值的 lambda,显式指定返回类型为 double

Lambda 表达式在 C++11 及更高版本中非常有用,特别是在需要简洁的回调函数、临时函数对象或在 STL 算法中使用的场合。在 Qt 中,lambda 通常用于信号和槽的连接,因为它们可以简化代码并提高可读性。

相关推荐

  1. Lambda表达式

    2023-12-23 20:18:05       27 阅读
  2. Lambda表达式

    2023-12-23 20:18:05       32 阅读
  3. Cron 表达式

    2023-12-23 20:18:05       18 阅读
  4. Lambda 表达式

    2023-12-23 20:18:05       20 阅读
  5. Lambda表达式

    2023-12-23 20:18:05       15 阅读
  6. Spel 表达式

    2023-12-23 20:18:05       20 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-23 20:18:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-23 20:18:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-23 20:18:05       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-23 20:18:05       20 阅读

热门阅读

  1. 【Qt】qDebug() 输出16进制数的几种方法

    2023-12-23 20:18:05       41 阅读
  2. Python正则表达式元字符与组匹配模式

    2023-12-23 20:18:05       43 阅读
  3. LeetCode 1671. 得到山形数组的最少删除次数

    2023-12-23 20:18:05       48 阅读
  4. 5-Docker实例-安装php

    2023-12-23 20:18:05       43 阅读
  5. npm的介绍和使用

    2023-12-23 20:18:05       33 阅读
  6. Linux根目录下默认目录作用

    2023-12-23 20:18:05       41 阅读
  7. 事件相机角点检测:从原理到演示编程

    2023-12-23 20:18:05       40 阅读
  8. UDP Ping程序实现--第2关:接收并转发消息

    2023-12-23 20:18:05       42 阅读