学习C++——lambda表达式

C++ language

C++11 - the new ISO C++ standard

上面三个是C++学习网站,有助于了解C++11的新特性。

lambda表示式(C++11)

1、介绍lambda

我们使用过的仅有两种可调用对象是函数和函数指针。还有其他两种可调用对象:重载了函数调用运算符的类,以及lambda表达式。
一个lambda表达式表示一个可调用的代码单元。我们可以将其理解为一个未命名的内联函数。
一个lambda表达式的形式为:
[capture list] (parameter  list) -> return type {function body}
其中,capture list (捕获列表)是一个lambda所在函数中定义的局部变量的列表(通常为空);
return type,parameter list , function body与任何普通函数一样,分别表示返回类型,参数列表,函数体。 但是,lambda必须使用尾置返回来指定返回类型。

尾置返回类型(C++ 11):

任何函数的定义都能使用尾置返回,但是这种形式对于返回类型比较复杂的函数最为有效,比如返回类型是数组的指针或者数组的引用。
尾置返回类型跟在形参列表后面并以一个->符号开头。为了表示函数真正的返回类型跟在形参列表之后,我们在本应该出现返回类型的地方放置了一个auto。

auto  func(int  i) -> int (*) [10];//func接受一个int类型的实参,返回一个指针,该指针指向含有10个整数的数组。

我们可以忽略参数列表和返回类型,但必须永远包含捕获列表和函数体:
auto  f = [ ] {return 42};   定义了一个可调用对象f,它不接受参数,返回42;// 此时的lambda没有参数列表,没有返回类型 ,只包括  [ ]  {return 42;}
cout << f() << endl;//这是lambda的调用方式,和普通函数的调用方式一样,输出42;

2、向lambda传递参数

调用一个lambda时给定的实参被用来初始化lambda的形参,与一个普通函数的调用是一样的。lambda不能有默认参数。

//作为一个带参数的lamdba的例子,我们可以编写一个与isShorter功能一样的lamdba
[] (const string &a, const string &b)
{ return a.size() < b.size();}
/*
	空捕获列表表明此lamdba不使用它所在函数中的任何局部变量。
	lamdba中的参数与isShorter类似,是const string 引用。
*/
//使用stable_sort
stable_sort(words.begin(), words.end(), 
			[] (const string &a, const string &b)
			{ return a.size() <
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值