0


C++ 匿名函数

1.概念:

C++11提供了类似与Python的lambda表达式的方式,称为匿名函数,其好处是:使用匿名函数,可以免去函数的声明和定义。这样匿名函数仅在调用函数的时候才会创建函数对象,而调用结束后立即释放,所以匿名函数比非匿名函数更节省空间。

2.详解

其表达形式如下:
capture->return-type{body}
如果没有参数,空的圆括号()可以省略.返回值也可以省略,如果函数体只由一条return语句组成或返回类型为void的话.形如:
capture{body}

Lambda函数可以引用在它之外声明的变量. 这些变量的集合叫做一个闭包. 闭包被定义在Lambda表达式声明中的方括号[]内. 这个机制允许这些变量被按值或按引用捕获.

  • capture

[] //未定义变量.试图在Lambda内使用任何外部变量都是错误的.
[x, &y] //x 按值捕获, y 按引用捕获.
[&] //用到的任何外部变量都隐式按引用捕获
[=] //用到的任何外部变量都隐式按值捕获
[&, x] //x显式地按值捕获. 其它变量按引用捕获
[=, &z] //z按引用捕获. 其它变量按值捕获

  • parameters:存储函数的参数
  • return-type:函数的返回值
  • body:函数体

几个小例子

[](int x,int y){return x + y;}// 隐式返回类型[](int& x){++x;}// 没有return语句 -> lambda 函数的返回类型是'void'[](){++global_x;}// 没有参数,仅访问某个全局变量[]{++global_x;}// 与上一个相同,省略了()
标签: c++ lambda

本文转载自: https://blog.csdn.net/YFaris/article/details/118992254
版权归原作者 YFaris 所有, 如有侵权,请联系我们删除。

“C++ 匿名函数”的评论:

还没有评论