栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++(11):局部函数lambda

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++(11):局部函数lambda

C++11之前,不能在一个函数里面再定义一个函数,C++11引入了lambda函数的概念,可以在一个函数内部定义局部函数:

#include 
#include 
using namespace std;

int main(){
	vector a = {1, 2, 3, 4};
	vector b = {5, 6, 7, 8};
	auto p=[](vector& d){    //定义一个lambda函数
		for(auto i : d)
		{
			cout< 

lambda函数的声明:

[capture](parameters)mutable->return-type{statement}

  • [capture]:捕获列表,用于描述lambda函数可以使用父作用域(包含lambda函数的块作用域)的自由变量(必须是自由变量)的范围和方式:
[var]以传值的方式捕获父作用的变量var(由于是传值,相当于在定义lambda函数的时候完成捕获 ,生成了var的常量拷贝,因此后续无法改变)
[=]以传值的方式捕获父作用域的所有变量(保护this)
[&var]以引用的方式捕获父作用域的变量var(由于是引用,var的值会随着父作用域内的var的变化而变化,并且可以在lambda函数内,对var进行写操作)
[&]以引用的方式捕获父作用域的所有变量(保护this)
[this]以传值的方式捕获父作用域的this指针
  • (parameters):参数列表,与普通函数一样,如果没有可以省略
  • mutable:lambda函数默认是个const函数,通过mutable修饰符,可以消除函数const属性
  • return-type:返回值类型,如果可以被自动推导出来,那么可以省略
  • {statement}:函数体,跟普通函数一样
#include 
#include 
using namespace std;

int main(){
	vector a = {1, 2, 3, 4};
	auto pV=[a]{    //以传值的方式捕获a
		for(auto i : a)
		{
			cout< 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/849591.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号