C++匿名函数

1. 概述

​ 匿名函数也称为lambda函数或lambda表达式,最简单的匿名函数形式:{}

​ []:捕获函数外部的变量

​ ():匿名函数的参数

​ {}:匿名函数的执行体

#include <iostream>  
using namespace std;  
int main()  
{  
    auto func = [] () { cout << "Hello world"; };  
    func(); // now call the function  
}

2. lambda表达式

[capture](parameters)->return-type{body}
[](int x, int y) -> int { int z = x + y; return z; }

xxx.set_cb([](parameter a, parameter b)->int{
    //todo
});

​ 如果参数没有的话()是可以省略的,如果返回类型为void也可以省略-> void。

3. lambda函数中的变量截取

  • [] //不截取任何变量,试图在Lambda内使用任何外部变量都是错误的(全局变量除外).
  • [&] //截取外部作用域中所有变量,并作为引用在函数体中使用
  • [=] //截取外部作用域中所有变量,并拷贝一份在函数体中使用
  • [=, &foo] //截取外部作用域中所有变量,并拷贝一份在函数体中使用,但是对foo变量使用引用
  • [bar] //截取bar变量并且拷贝一份在函数体重使用,同时不截取其他变量
  • [this] //截取当前类中的this指针。如果已经使用了&或者=就默认添加此选项。
  • [x, &y] //x 按值捕获, y 按引用捕获.
  • [&, x] //x显式地按值捕获. 其它变量按引用捕获
  • [=, &z] //z按引用捕获. 其它变量按值捕获