c++11之lambda

  • 基本测试代码
      1. /************************************************************************/
      2. /* 测试lambda */
      3. /************************************************************************/
      4. #include<iostream>
      5. #include<functional>
      6. class A
      7. {
      8. public:
      9. int i_ =0;
      10. void func(int x,int y)
      11. {
      12. auto ff =[this, x, y]{return i_ + x + y;};//捕获了this,否则没法使用类成员变量
      13. }
      14. };
      15. int main()
      16. {
      17. //[]内为要捕获的外部变量
      18. auto f1 =[](int a)->int{return a;};//这是完整的写法,带参数列表,带返回值
      19. auto f2 =[](int a){return a +1;};//省略了返回值类型,这个是显而易见的
      20. auto f3 =[]{return2;};//没有参数这可以省略不写
      21. int a =0;
      22. auto f =[=]{return a;};//捕获所有变量的值,没法修改a,只是传递了值
      23. a++;
      24. std::cout << f()<< std::endl;
      25. //输出为0
      26. int b =2;
      27. auto f4 =[&b]{return++b;};//捕获了变量b的引用,对其修改
      28. std::cout << f4()<< std::endl;
      29. //配合bind
      30. std::function<int(int)> fr =[](int a){return a +9;};
      31. auto fr2 = std::bind(fr,4);
      32. auto fr3 = std::bind([](int a){return a;},555);
      33. std::cout << fr2()<< std::endl;
      34. std::cout << fr3()<< std::endl;
      35. }

来自为知笔记(Wiz)

时间: 2024-10-10 17:46:04

c++11之lambda的相关文章

C++11 里lambda表达式的学习

最近看到很多关于C++11的文档,有些是我不怎么用到,所以就略过去了,但是lambda表达式还是比较常用的,其实最开始学习python的时候就觉得lambda这个比较高级,为什么C++这么弱.果然C++增加这个东西. 语法 [ capture ] ( params ) mutable exception attribute -> ret { body }      (1) [ capture ] ( params ) -> ret { body }                       

初窥c++11:lambda函数

为什么需要lambda函数 匿名函数是许多编程语言都支持的概念,有函数体,没有函数名.1958年,lisp首先采用匿名函数,匿名函数最常用的是作为回调函数的值.正因为有这样的需求,c++引入了lambda 函数,你可以在你的源码中内联一个lambda函数,这就使得创建快速的,一次性的函数变得简单了.例如,你可以把lambda函数可在参数中传递给std::sort函数 #include <algorithm> #include <cmath> void abssort(float*

C++11之lambda函数

lambda来源于函数式编程的概念,也是现代语言编程的特点. 首先看看lambda的基本用法: 1 [capture] (params) opt->return {body;} 其中, capture 是捕获列表(即闭包中的自由变量): [] 不截取任何变量 [&] 截取外部作用域中所有变量,并作为引用在函数体中使用 [=] 截取外部作用域中所有变量,并拷贝一份在函数体中使用 [=, &foo] 截取外部作用域中所有变量,并拷贝一份在函数体中使用,但是对foo变量使用引用 [bar]

C++11之lambda表达式

lambda表达式源于函数式编程的概念,它可以就地匿名定义目标函数或函数对象,不需要额外写一个命名函数或者函数对象.lambda表达式的类型在C++11中被称为"闭包类型",也可以理解为是一个仿函数(带operator()类),其语法形式如下: [capture] (params) opt -> ret {body;}; capture: 捕获列表: params: 参数列表: opt: 函数选项: ret: 返回值类型: body: 函数体. 一个简单的lambda表达式如下:

STL - C++ 11的Lambda表达式

Lambda始自C++ 11,是一种在表达式或语句内指定函数行为的定义式. 你可以定义函数行为作为对象,以inline实参的形式传给算法作为predicate(判断式). eg: std:transform(coll.begin(), coll.end(),  // source                      coll.begin(),                 // destination                      [](double d) {        

[Java 8] (11) 使用Lambda的原则

要想更好的使用函数式编程,仅仅熟悉其语法结构是远远不够的.必须从思想和设计层面,去考虑它,去接纳它.这种编程范式和大多数开发人员所熟知的面向对象编程范式是不同的. 下面我们从以下几个方面来回顾一下使用函数式编程的要点: 多用声明式,少用命令式 要想更好的使用函数式编程,首先必须要提升代码的抽象程度.之所以使用函数式编程在完成同样任务时需要的代码量比命令式要少,很大程度上就是源于函数式风格的代码的抽象程度更高,能够表达的语义也就更丰富. 当我们使用命令式风格的代码时,我们习惯很快地就进入到细节上的

STL - C++ 11的Lambda表达式(下)

关于lambda的基础知识,请参考上一篇的地址如下: http://www.cnblogs.com/davidgu/p/4825625.html 我们再举个STL使用Lambda来进行排序的例子,如下: Person.h #ifndef _Domain_Models_Person_H_ #define _Domain_Models_Person_H_ #include <iostream> #include <string> #include <deque> using

C++11 lambda的理解

C++11 的 lambda 表达式规范如下: [ capture ] ( params ) mutable exception attribute -> ret { body } (1) [ capture ] ( params ) -> ret { body } (2) [ capture ] ( params ) { body } (3) [ capture ] { body } (4) // 简单的例子// 这个例子有2个参数x和y 返回x+y [](int x,int y){ ret

C++11 Lambda表达式简单解析

C++11 新增了很多特性,lambda 表达式是其中之一,如果你想了解的 C++11 完整特性, 建议去http://www.open-std.org/看看新标准! 很多语言都提供了 lambda 表达式,如 Python,Java 8 lambda 表达式可以方便地构造匿名函数,如果你的代码里面存在大量的小函数,而这些函数一般只被调用一次,那么不妨将他们重构成 lambda 表达式. C++11 的 lambda 表达式规范如下: [ capture ] ( params ) mutable