代码:

#include <iostream>
#include <functional>
using namespace std;

void(*p)(void);
int TestFunc()
{
auto func = []()->void {
cout << "123" << endl;
};

p = func;

return 0;
}


int main()
{
TestFunc();
p();


return 0;
}

可以正常输出 123。

lambda 的底层实现:

创建一个临时类,lambda的入参作为这个类型类的重载 operator() 的入参,捕获列表作为这个临时类的成员变量。比如 有 lambda  [&](int i,int j) -> int { return i+j ;} ,那么 对应的临时类可以表示为:

class Tmp
{
bool operator(int i , int j ) { return i + j; }
//所有引用作为成员变量
}