C++11的Lambda表达式基本介绍

lambda表达式是一种匿名函数,在Java,C#等高级语言中早有实现。在C++11中把lambda表达式纳入了标准中,lambda表达式是C++的一种可调用对象(callable object),可以像调用普通函数一样使用。对于那种只在一两个地方使用的简单操作,lambda表达式非常有用,如果我们需要在很多地方使用相同的操作,则使用普通函数更好。同样的,如果一个操作包含很多操作,也需要使用函数。

我们可以将lambda表达式理解为一个匿名的内联函数,一个完整的lambda表达式的结构如下:

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

capture list为捕获列表,是一个lambda所在函数中定义的局部变量的列表,通常为空,其余的则和普通函数一样。与普通函数唯一有点不一样的是lambda使用的是尾置返回。在一个lambda函数中,必须包含捕获列表和函数体,参数列表和返回类型则可以省略。比如:

auto f = [] {return 0;}
std::cout << f() << std::endl

和普通函数一样,我们也可以向一个lambda表达式传递参数,唯一不同的就是lambda表达式中的参数不能有默认参数,比如:

auto f = []{std::string& str} {return str.length();}

上面的lambda表达式函数体都只包含一个return语句,如果函数体包含出return以外其他语句,则默认返回类型为void,比如:

auto f = []{int a} {if(a > 0) return a;else return -a;}
int value = f(-20);

编译器会报错,指出返回值类型错误,正确的方式应该是指定返回类型

auto f = []{int a} -> int {if(a > 0) return a;else return -a;}
int value = f(-20);
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值