ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C++中的lambda表达式

2022-02-25 11:35:07  阅读:157  来源: 互联网

标签:capture 函数 捕获 list C++ 使用 lambda 表达式 变量


lambda 表达式表示一个可调用的代码单元,可理解为一个未命名的内联函数,其形式如下:

[capture list](parameter list) -> return-type{function body}

capture list :捕获列表,能够捕捉上下文中的变量供 Lambda 函数使用(通常为空);
parameter list : 参数列表,与普通函数的参数列表一致;
return type : 返回类型
function body : 函数体,内容与普通函数一样。不过除了可以使用参数之外,还可以使用所有捕获的变量。

其中,[capture list] 捕获列表的定义方式
[] 不导入任何变量。
[&] 捕获外部作用域中所有变量,并作为引用在函数体中使用(按引用捕获)。
[=] 捕获外部作用域中所有变量,并作为副本在函数体中使用(按值捕获)。
[=,&foo] 混合使用,按值捕获外部所有变量,并按引用捕获 foo 变量。
[bar] 按值捕获 bar 变量,同时不捕获其他变量。
[this] 捕获当前类中的 this 指针,可以在 lamda 中使用当前类的成员函数和成员变量。

在这里插入图片描述
1、this捕获,可以使用当前对象的成员函数sayHello()

[this](){
		this->sayHello(); 
      };

2、值捕获,这里使用了外部的info变量

[=]() {
	SDKConfInfo(info.toStdString().c_str());
}

3、不捕获,但传递形参a

auto func = [](int a) {std::cout<<a<<std::endl;};
func(9);//输出9

标签:capture,函数,捕获,list,C++,使用,lambda,表达式,变量
来源: https://blog.csdn.net/weixin_44084447/article/details/123127653

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有