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; }
|