7-3 lambda表达式的实现原理

7.3 lambda表达式的实现原理

​ lambda表达式本质上是创建了一个类,然后实例化一个类对象。函数体是该类的重载运算符(),调用lambda表达式时,本质就是调用这个对象的()运算符函数。

#include <iostream>

int main()
{
int x = 5, y = 8;
auto foo = [=]{ return x* y;};
int z = foo();
}

//下面是中间代码文件的输出结果:
main ()
{
int D.2423;

{
int x;
int y;
struct __lambda0 foo; //创建结构体的对象
typedef struct __lambda0 __lambda0;
int z;

try
{
x = 5;
y = 8;
foo.__x = x;
foo.__y = y;
z = main()::<lambda()>::operator() (&foo); //调用这个结构体的重载()运算符
}
finally
{
foo = {CLOBBER};
}
}
D.2423 = 0;
return D.2423;
}


main()::<lambda()>::operator() (const struct __lambda0 * const __closure)
{
int D.2425;
const int x [value-expr: __closure->__x];
const int y [value-expr: __closure->__y];

_1 = __closure->__x;
_2 = __closure->__y;
D.2425 = _1 * _2;
return D.2425;
}