C++匿名函数lamba简介

一、定义

Lambda 表达式是 C++11 引入的一个功能,允许你在代码中定义匿名函数(即没有名字的函数)。这种表达式可以用于简化函数对象的定义,并使得代码更简洁。Lambda 表达式特别适用于局部的、一次性的函数对象,如用于 STL 算法中。

二、基本语法

[捕获列表](参数列表)mutable(可选)异常属性 -> 返回类型(可省略){
// 函数体
}
返回类型可自动推导,但是如果有多个return语句还是要显示指定。


int main() {
   
   
	auto Add = [](int a, int b)->int {
   
   
		return a + b;
	}
	std::cout << Add(1, 2) << std::endl;	// 输出3
	return 0;
}

int main() {
   
   
	auto Add = [](int a, int b) {
   
   
		return a + b;
	}
	std::cout << Add(1, 2) << std::endl;	// 输出3
	return 0;
}

三、捕获列表

  1. 值捕获

用 ‘=’ 表示,前提是捕获的变量可以拷贝,在表达式被创建的时候即捕获,捕获的变量即使后面被更改也不会改变函数体内的值。


void main()
{
   
   
    int c = 12;
    int d = 30;
    auto Add = [c, d
### C++ Lambda 表达式的使用方法和特性 #### 定义与基本语法 Lambda表达式是C++11标准引入的一种匿名函数,允许在需要函数的地方直接编写代码块,而无需定义一个完整的函数。其主要用途在于简化回调函数以及STL算法的应用场景[^2]。 #### 语法结构 典型的lambda表达式由以下几个部分组成: - **捕获列表**:决定哪些局部变量可以在lambda体内被访问。 - **参数列表**:类似于常规函数的参数说明。 - **可选返回类型**:对于复杂情况下的显式指定(默认自动推导)。 - **函数体**:执行的具体逻辑。 例如,最简单的形式如下所示: ```cpp [] () { /* 函数体 */ } ``` 当涉及到具体应用时,则可以根据需求调整各个组成部分的内容。比如,在上述例子中创建了一个接受整数并返回该数值加一的操作: ```cpp [](int x) { return x + 1; } ``` #### 捕获机制 为了使lambda能够操作所在作用域内的变量,可以通过捕获列表来实现这一点。常见的几种方式有按值传递(`=`, `&`)或者混合模式([`this`]表示当前类实例)[^3]。 - `[=]`: 复制所有外部变量到闭包环境; - `[&]`: 引用所有外部变量至闭包内部; - `[var, &refVar]`: 显式指明要复制或引用特定变量; #### 实际案例展示 下面的例子展示了如何利用lambda作为函数对象存放在容器当中,并通过迭代器遍历调用这些函数对象来进行计算处理[^1]: ```cpp #include <iostream> #include <vector> #include <functional> int main() { // 存储Lambda表达式的向量 std::vector<std::function<int(int)>> v; // 使用Lambda表达式推入函数对象 v.push_back([](int x) { return x + 1; }); v.push_back([](int x) { return x * 2; }); // 输出Lambda表达式值 for (auto f : v) { std::cout << f(2) << " "; } return 0; } ``` 此程序会依次打印出两个不同的运算结果:“3 4”。 #### 特性和优势 - 提高代码简洁度,减少不必要的命名函数开销。 - 方便地嵌入到其他语句之中,增强表达力。 - 支持复杂的控制流设计,特别是在涉及多线程编程或是异步任务调度的情况下显得尤为有用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

# 不想写代码的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值