码迷,mamicode.com
首页 > 编程语言 > 详细

C++11 lambda的理解

时间:2016-06-25 23:00:42      阅读:258      评论:0      收藏:0      [点我收藏+]

标签:

C++11 的 lambda 表达式规范如下:

[ capture ] ( params ) mutable exception attribute -> ret { body } (1)
[ capture ] ( params ) -> ret { body } (2)
[ capture ] ( params ) { body } (3)
[ capture ] { body } (4)

 

// 简单的例子
// 这个例子有2个参数x和y 返回x+y

[](int x,int y){ return x+y; };

 

其实看起来和函数差不多
只不过使用了[]代替了函数名,
[]里面的捕获参数:

[] // 不捕获外部变量
[&] // 引用形式捕获所有外部变量
[=] // 传值形式捕获所有外部变量
[x, &y] // x以传值捕获(默认),y 以引用捕获。
[&, x] // x单独以传值方式捕获,其余都为引用
[=, &x] // x单独以引用方式捕获,其余都为传值

 

 

//例子2

// 遍历所有窗口句柄
//
int main()
{
    auto func = [](HWND hwnd,LPARAM lpm){ 
        printf("wnd : %d\n",hwnd);
        return 1;
    };

    EnumWindows(func,0);

    Sleep(INFINITE);
    return 0;
}




;
;对上面这段函数进行反汇编:
;
00991000 >/$  6A 00         push    0                                ; /lParam = 0
00991002  |.  68 18109900   push    <lambda_e719811ef777855facd3e231>; |Callback = ConsoleA.<lambda_xxxxxxxx>
00991007  |.  FF15 04B19900 call    dword ptr [<&USER32.EnumWindows>>; \EnumWindows
0099100D  |.  6A FF         push    -1                               
0099100F  |.  FF15 00B09900 call    dword ptr [<&KERNEL32.Sleep>]    
00991015  |.  33C0          xor     eax, eax
00991017  \.  C3            retn

Callback:
00991018 >/.  55            push    ebp
00991019  |.  8BEC          mov     ebp, esp
0099101B  |.  FF75 08       push    dword ptr [ebp+8]                ; /<%d>
0099101E  |.  68 00039A00   push    009A0300                         ; |format = "wnd : %d",LF,""
00991023  |.  E8 35070000   call    printf                           ; \printf
00991028  |.  59            pop     ecx
00991029  |.  33C0          xor     eax, eax
0099102B  |.  59            pop     ecx
0099102C  |.  40            inc     eax
0099102D  |.  5D            pop     ebp
0099102E  \.  C2 0800       retn    8

 

C++11 lambda的理解

标签:

原文地址:http://www.cnblogs.com/codetask/p/5617025.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!