C++ lambda表达式
2023-12-23 18:36:18
C++ lambda表达式
Lambda 表达式是 C++ 中的一个功能,它允许你创建匿名函数。Lambda 表达式的通用语法如下:
[capture](parameters) mutable -> return_type { body }
各部分的含义如下:
- capture:捕获列表,定义了从外部作用域捕获哪些变量以及如何捕获(按值或按引用)。
- parameters:参数列表,与普通函数的参数列表类似。
- mutable:如果使用了这个关键字,可以修改按值捕获的变量。
- return_type:返回类型,可以显式指定,也可以让编译器自动推断。
- body:函数体,包含了 lambda 表达式要执行的代码。
捕获列表(Capture)的几种形式:
-
不捕获任何外部变量:
[]{ /* code */ }
-
按值捕获所有外部变量:
[=]{ /* code */ }
-
按引用捕获所有外部变量:
[&]{ /* code */ }
-
按值捕获特定变量:
[x]{ /* code */ }
-
按引用捕获特定变量:
[&x]{ /* code */ }
-
混合捕获模式:
[x, &y]{ /* code */ }
-
隐式捕获某些变量,显式捕获其他变量:
[=, &x]{ /* code */ } [&x, y]{ /* code */ }
例子与解释:
-
不捕获任何外部变量:
[]{ return 42; }
一个简单的 lambda,不使用任何外部变量,返回 42。
-
按值捕获外部变量:
int x = 1; auto l = [=]{ return x + 1; };
这个 lambda 按值捕获
x
,返回x + 1
的结果。 -
按引用捕获外部变量并修改:
int x = 1; auto l = [&x]{ ++x; };
按引用捕获
x
并在 lambda 内部对其进行修改。 -
具有参数的 lambda:
auto l = [](int a, int b){ return a + b; };
一个接受两个整数参数并返回它们的和的 lambda。
-
可变 lambda(修改按值捕获的变量):
int x = 1; auto l = [x]() mutable { return ++x; };
mutable
关键字允许 lambda 修改按值捕获的变量。 -
带有显式返回类型的 lambda:
auto l = [](int a, int b) -> double { return (a + b) / 2.0; };
一个计算平均值的 lambda,显式指定返回类型为
double
。
Lambda 表达式在 C++11 及更高版本中非常有用,特别是在需要简洁的回调函数、临时函数对象或在 STL 算法中使用的场合。在 Qt 中,lambda 通常用于信号和槽的连接,因为它们可以简化代码并提高可读性。
文章来源:https://blog.csdn.net/Johnor/article/details/135171899
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!