C++学习--Lambda表达式

Lambda的形式是[函数对象参数](操作符重载函数参数)某种声明(例如:mutable)->返回值类型{函数体};

Lambda的调用方式有两种,一种是直接在整个Lambda表达式后面带上(),因为Lambda表达式就是函数指针,函数指针带上()就是调用,另一种是起一个别名,即使把Lambda赋值给一个变量名,通过变量名+()进行调用。

直接看它的定义时非常难懂的,简单来说[ ]里的是你可以在Lambda表达式中使用的参数,例如:你在类中使用Lambda表达式,想在Lambda中使用类的变量(包括this指针)那么你可以通过[ ]给Lambda传递。

1.空:Lambda表达式不使用在同一块语句的变量,例如:[]
2.=:在块语句内的局部变量都以值传递的方式传递给Lambda,例如:[=]
3.&:块语句内的局部变量以引用方式传递给Lambda,例如:[&]
4.指定某个变量传递,例如:[a],[&a]

注意:

值传递的方式在Lambda不能对变量做出修改,例如:[a](){函数体};在函数体中,只能访问变量a,不能对变量a做出修改。想要修改a的值可以用引用的方式传递[&a];也可以声明为mutable,例如:[a]()mutable{函数体};那么在{函数体}中可以修改a的值,但这个a是函数体的副本,不是外部的a。

#include<iostream>
#include<functional>
#include<stdlib.h>
using namespace std;
void main()
{
	int a = 10;
	auto f=[a]()mutable{
		a++;
		cout << a << endl; 
	};//值传递
	f();//调用Lambda
	cout << a << endl;
	auto f2 = [&a](){
		a++;
	};//引用
	f2();//调用Lambda
	cout << a << endl;
	system("pause");
}

由打印结果可以区分mutable[&]的区别。

参数:

Lambda接收参数,参数用()传递,例如:

[ ](int a,int b){函数体};

#include<iostream>
#include<functional>
#include<stdlib.h>
using namespace std;
void main()
{
	int a(10), b(20);
	auto add=[](int a, int b){
		cout << a + b << endl; 
	};
	add(a, b);//传参
	system("pause");
}

指定返回值类型:

Lambda表达式中{函数体}若有返回值,可以通过->返回值类型指定,例如:

#include<iostream>
#include<stdlib.h>
#include<functional>
using namespace std;
void main()
{
	int a(10), b(20);
	auto add=[](int a, int b)->int{//指定返回值类型
		return a + b;
	};
	cout<<add(a, b)<<endl;
	system("pause");
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Lambda表达式是现代C++中的一个新特性,它是一种方便的语法糖,用于定义匿名函数对象。Lambda表达式可以在调用或作为函数参数传递的位置处定义几行代码的匿名函数对象。 Lambda表达式C++11、C++14、C++17和C++20中都得到了支持,并且其使用方法和内容在不同版本中有所更新。 在C++中,Lambda表达式可以被称为Lambda函数、Lambda表达式或匿名函数,但为了方便叙述,本文中统一使用Lambda表达式这个术语。 Lambda表达式的语法如下: ``` [capture-list](parameters) mutable(optional) exception-specification(optional) -> return-type(optional) { // 函数体 } ``` 其中,`capture-list`表示捕获列表,用于指定Lambda表达式中需要捕获的外部变量;`parameters`表示参数列表;`mutable`表示可选的修饰符,用于取消Lambda函数的常量性;`exception-specification`表示异常说明;`return-type`表示返回类型;`函数体`表示Lambda函数的具体实现。 下面是一个Lambda表达式的示例: ```cpp #include <iostream> #include <algorithm> int main() { int m = 0; int n = 0; [&n, m](int a) mutable { m = n + a; }(4); std::cout << m << std::endl << n << std::endl; return 0; } ``` 在这个示例中,Lambda表达式通过捕获列表`[&n, m]`捕获了变量`n`和`m`,参数列表为空,`mutable`修饰符使得Lambda函数可以修改捕获的变量,函数体中的代码将`m`的值设置为`n + a`。最后在主函数中调用Lambda函数,并输出`m`和`n`的值。 希望这个回答能够解决你的问题。如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值