C++中lambda表达式的通用语法

本文详细介绍了C++中的lambda表达式,包括其基本语法、状态变量的处理(捕获列表、可变性和引用)、输入参数的定义、以及如何明确返回类型。它还对比了lambda与传统的函数对象,强调了lambda的简洁性。
摘要由CSDN通过智能技术生成

C++中lambda表达式的通用语法

lambda 表达式总是以方括号打头,并可接受多个状态变量,为此可在捕获列表( […])中指定这
些状态变量,并用逗号分隔:

[stateVar1, stateVar2](Type& param) { // lambda code here; }

如果要在 lambda 表达式中修改这些状态变量,可添加关键字 multable:

[stateVar1, stateVar2](Type& param) mutable { // lambda code here; }

这样,便可在 lambda 表达式中修改捕获列表( [])中指定的变量,但离开 lambda 表达式后,这些
修改将无效。要确保在 lambda 表达式内部对状态变量的修改在其外部也有效,应按引用传递它们:

[&stateVar1, &stateVar2](Type& param) { // lambda code here; }

lambda 表达式还可接受多个输入参数,为此可用逗号分隔它们:

[stateVar1, stateVar2](Type1& var1, Type2& var2) { // lambda code here; }

如果要向编译器明确地指定返回类型,可使用->,如下所示:

[stateVar1, stateVar2](Type1 var1, Type2 var2) -> ReturnType
{ return (value or expression ); }

最后,复合语句( {})可包含多条用分号分隔的语句,如下所示:

[stateVar1, stateVar2](Type1 var1, Type2 var2) -> ReturnType
{
Statement 1;
Statement 2;
return (value or expression);
}

如果 lambda 表达式包含多行代码,您必须显式地指定返回类型。
本章后面的程序清单 22.5 演示了一个跨越多行并指定了返回类型的 lambda 表达式。

总之, lambda 表达式更简洁,从功能上说,完全可替代下面这样的函数对象:

template<typename Type1, typename Type2>
struct IsNowTooLong
{
// State variables
Type1 var1;
Type2 var2;
// Constructor
IsNowTooLong(const Type1& in1, Type2& in2): var1(in1), var2(in2) {};
// the actual purpose
ReturnType operator()
{
Statement 1;
Statement 2;
return (value or expression);
}
};
  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值