美文网首页
C++ 匿名函数(lambda函数,lambda表达式)

C++ 匿名函数(lambda函数,lambda表达式)

作者: 韩梅梅梅梅 | 来源:发表于2016-08-29 11:11 被阅读174次
      转自http://blog.csdn.net/augusdi/article/details/11773943
    

    C++11提供了对匿名函数的支持,称为Lambda函数(也叫Lambda表达式). Lambda表达式具体形式如下:
    capture->return-type{body}
    如果没有参数,空的圆括号()可以省略.返回值也可以省略,如果函数体只由一条return语句组成或返回类型为void的话.形如:
    capture{body}
    下面举了几个Lambda函数的例子:     
    [](int x, int y) { return x + y; } // 隐式返回类型
    [](int& x) { ++x; } // 没有return语句 -> lambda 函数的返回类型是'void'
    { ++global_x; } // 没有参数,仅访问某个全局变量
    []{ ++global_x; } // 与上一个相同,省略了()

    可以像下面这样显示指定返回类型: [](int x, int y) -> int { int z = x + y; return z; }

    在这个例子中创建了一个临时变量z来存储中间值. 和普通函数一样,这个中间值不会保存到下次调用. 什么也不返回的Lambda函数可以省略返回类型, 而不需要使用 -> void 形式.  Lambda函数可以引用在它之外声明的变量. 这些变量的集合叫做一个闭包. 闭包被定义在Lambda表达式声明中的方括号[]内. 这个机制允许这些变量被按值或按引用捕获.下面这些例子就是:

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

    相关文章

      网友评论

          本文标题:C++ 匿名函数(lambda函数,lambda表达式)

          本文链接:https://www.haomeiwen.com/subject/xauxettx.html