青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-91  評論-137  文章-0  trackbacks-0

Lambda表達(dá)式提供了匿名函數(shù)這個概念,可以使您在一個函數(shù)中書寫另一個匿名的函數(shù)體

先來看下如何在VC2010中書寫Lambda表達(dá)式

[捕捉項(xiàng)表](參數(shù)表)->返回類型{函數(shù)體}
捕捉項(xiàng)表中在變量前添加&操作符表示捕捉引用,添加=表示捕捉值
參數(shù)表與"->"和后面的返回類型是可選的編譯器會由函數(shù)體內(nèi)的return語句判斷返回類型,當(dāng)返回類型很復(fù)雜時編譯器無法判斷,則必須手動給出!

下面舉個簡單的例子:
 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5     int a = 100;
 6     [a]{
 7         printf("%d\n",a);
 8     }();
 9     return 0;
10 }
然后在VS2010提示中編譯它:cl /FAs a.cpp
/FAs參數(shù)指定了輸出匯編文件a.asm.

然后我們來看一下它生成的匯編代碼:
  1 ; Listing generated by Microsoft (R) Optimizing Compiler Version 16.00.30319.01 
  2 
  3     TITLE    D:\a.cpp
  4     .686P
  5     .XMM
  6     include listing.inc
  7     .model    flat
  8 
  9 INCLUDELIB LIBCMT
 10 INCLUDELIB OLDNAMES
 11 
 12 PUBLIC    ??R<lambda0>@?A0x428ab923@@QBEXXZ        ; `anonymous namespace'::<lambda0>::operator()
 13 PUBLIC    ??0<lambda0>@?A0x428ab923@@QAE@ABH@Z        ; `anonymous namespace'::<lambda0>::<lambda0>
 14 PUBLIC    _main
 15 ; Function compile flags: /Odtp
 16 ; File d:\a.cpp
 17 _TEXT    SEGMENT
 18 $T3875 = -8                        ; size = 4
 19 _a$ = -4                        ; size = 4
 20 _main    PROC
 21 
 22 4    : {
 23 
 24     push    ebp
 25     mov    ebp, esp
 26     sub    esp, 8
 27 
 28 5    :     int a = 100;
 29 
 30     mov    DWORD PTR _a$[ebp], 100            ; 00000064H
 31 
 32 6    :     [a]{
 33 7    :         printf("%d\n",a);
 34 8    :     }();
 35 
 36     lea    eax, DWORD PTR _a$[ebp]
 37     push    eax
 38     lea    ecx, DWORD PTR $T3875[ebp]
 39     call    ??0<lambda0>@?A0x428ab923@@QAE@ABH@Z    ; `anonymous namespace'::<lambda0>::<lambda0>
 40     mov    ecx, eax
 41     call    ??R<lambda0>@?A0x428ab923@@QBEXXZ    ; `anonymous namespace'::<lambda0>::operator()
 42 
 43 9    :     return 0;
 44 
 45     xor    eax, eax
 46 
 47 10   : }
 48 
 49     mov    esp, ebp
 50     pop    ebp
 51     ret    0
 52 _main    ENDP
 53 ; Function compile flags: /Odtp
 54 _TEXT    ENDS
 55 ;    COMDAT ??0<lambda0>@?A0x428ab923@@QAE@ABH@Z
 56 _TEXT    SEGMENT
 57 _this$ = -4                        ; size = 4
 58 __A$ = 8                        ; size = 4
 59 ??0<lambda0>@?A0x428ab923@@QAE@ABH@Z PROC        ; `anonymous namespace'::<lambda0>::<lambda0>, COMDAT
 60 ; _this$ = ecx
 61 
 62 8    :     }();
 63 
 64     push    ebp
 65     mov    ebp, esp
 66     push    ecx
 67     mov    DWORD PTR _this$[ebp], ecx
 68     mov    eax, DWORD PTR _this$[ebp]
 69     mov    ecx, DWORD PTR __A$[ebp]
 70     mov    edx, DWORD PTR [ecx]
 71     mov    DWORD PTR [eax], edx
 72     mov    eax, DWORD PTR _this$[ebp]
 73     mov    esp, ebp
 74     pop    ebp
 75     ret    4
 76 ??0<lambda0>@?A0x428ab923@@QAE@ABH@Z ENDP        ; `anonymous namespace'::<lambda0>::<lambda0>
 77 _TEXT    ENDS
 78 PUBLIC    ??_C@_03PMGGPEJJ@?$CFd?6?$AA@            ; `string'
 79 EXTRN    _printf:PROC
 80 ;    COMDAT ??_C@_03PMGGPEJJ@?$CFd?6?$AA@
 81 CONST    SEGMENT
 82 ??_C@_03PMGGPEJJ@?$CFd?6?$AA@ DB '%d', 0aH, 00H        ; `string'
 83 ; Function compile flags: /Odtp
 84 CONST    ENDS
 85 ;    COMDAT ??R<lambda0>@?A0x428ab923@@QBEXXZ
 86 _TEXT    SEGMENT
 87 _this$ = -4                        ; size = 4
 88 ??R<lambda0>@?A0x428ab923@@QBEXXZ PROC            ; `anonymous namespace'::<lambda0>::operator(), COMDAT
 89 ; _this$ = ecx
 90 
 91 6    :     [a]{
 92 
 93     push    ebp
 94     mov    ebp, esp
 95     push    ecx
 96     mov    DWORD PTR _this$[ebp], ecx
 97 
 98 7    :         printf("%d\n",a);
 99 
100     mov    eax, DWORD PTR _this$[ebp]
101     mov    ecx, DWORD PTR [eax]
102     push    ecx
103     push    OFFSET ??_C@_03PMGGPEJJ@?$CFd?6?$AA@
104     call    _printf
105     add    esp, 8
106 
107 8    :     }();
108 
109     mov    esp, ebp
110     pop    ebp
111     ret    0
112 ??R<lambda0>@?A0x428ab923@@QBEXXZ ENDP            ; `anonymous namespace'::<lambda0>::operator()
113 _TEXT    ENDS
114 END
115 
由匯編代碼可以看到先為Lambda函數(shù)生成了一個匿名對象,然后調(diào)用了()的操作符重載函數(shù)調(diào)用這個匿名函數(shù).

由此我們得出結(jié)論:調(diào)用一個匿名函數(shù)并沒有調(diào)用一個存在的函數(shù)或是一個類的成員函數(shù)快,只是書寫更方便罷了.

然后我們修改一下代碼,將匿名函數(shù)先賦給一個匿名函數(shù)指針,然后調(diào)用.
 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5     int a = 100;
 6     auto ptr = [a]{
 7         printf("%d\n",a);
 8     };
 9     ptr();
10     return 0;
11 }
編譯后得到代碼:
  1 ; Listing generated by Microsoft (R) Optimizing Compiler Version 16.00.30319.01 
  2 
  3     TITLE    D:\a.cpp
  4     .686P
  5     .XMM
  6     include listing.inc
  7     .model    flat
  8 
  9 INCLUDELIB LIBCMT
 10 INCLUDELIB OLDNAMES
 11 
 12 PUBLIC    ??R<lambda0>@?A0x428ab923@@QBEXXZ        ; `anonymous namespace'::<lambda0>::operator()
 13 PUBLIC    ??0<lambda0>@?A0x428ab923@@QAE@ABH@Z        ; `anonymous namespace'::<lambda0>::<lambda0>
 14 PUBLIC    _main
 15 ; Function compile flags: /Odtp
 16 ; File d:\a.cpp
 17 _TEXT    SEGMENT
 18 _ptr$ = -8                        ; size = 4
 19 _a$ = -4                        ; size = 4
 20 _main    PROC
 21 
 22 4    : {
 23 
 24     push    ebp
 25     mov    ebp, esp
 26     sub    esp, 8
 27 
 28 5    :     int a = 100;
 29 
 30     mov    DWORD PTR _a$[ebp], 100            ; 00000064H
 31 
 32 6    :     auto ptr = [a]{
 33 7    :         printf("%d\n",a);
 34 8    :     };
 35 
 36     lea    eax, DWORD PTR _a$[ebp]
 37     push    eax
 38     lea    ecx, DWORD PTR _ptr$[ebp]
 39     call    ??0<lambda0>@?A0x428ab923@@QAE@ABH@Z    ; `anonymous namespace'::<lambda0>::<lambda0>
 40 
 41 9    :     ptr();
 42 
 43     lea    ecx, DWORD PTR _ptr$[ebp]
 44     call    ??R<lambda0>@?A0x428ab923@@QBEXXZ    ; `anonymous namespace'::<lambda0>::operator()
 45 
 46 10   :     return 0;
 47 
 48     xor    eax, eax
 49 
 50 11   : }
 51 
 52     mov    esp, ebp
 53     pop    ebp
 54     ret    0
 55 _main    ENDP
 56 ; Function compile flags: /Odtp
 57 _TEXT    ENDS
 58 ;    COMDAT ??0<lambda0>@?A0x428ab923@@QAE@ABH@Z
 59 _TEXT    SEGMENT
 60 _this$ = -4                        ; size = 4
 61 __A$ = 8                        ; size = 4
 62 ??0<lambda0>@?A0x428ab923@@QAE@ABH@Z PROC        ; `anonymous namespace'::<lambda0>::<lambda0>, COMDAT
 63 ; _this$ = ecx
 64 
 65 8    :     };
 66 
 67     push    ebp
 68     mov    ebp, esp
 69     push    ecx
 70     mov    DWORD PTR _this$[ebp], ecx
 71     mov    eax, DWORD PTR _this$[ebp]
 72     mov    ecx, DWORD PTR __A$[ebp]
 73     mov    edx, DWORD PTR [ecx]
 74     mov    DWORD PTR [eax], edx
 75     mov    eax, DWORD PTR _this$[ebp]
 76     mov    esp, ebp
 77     pop    ebp
 78     ret    4
 79 ??0<lambda0>@?A0x428ab923@@QAE@ABH@Z ENDP        ; `anonymous namespace'::<lambda0>::<lambda0>
 80 _TEXT    ENDS
 81 PUBLIC    ??_C@_03PMGGPEJJ@?$CFd?6?$AA@            ; `string'
 82 EXTRN    _printf:PROC
 83 ;    COMDAT ??_C@_03PMGGPEJJ@?$CFd?6?$AA@
 84 CONST    SEGMENT
 85 ??_C@_03PMGGPEJJ@?$CFd?6?$AA@ DB '%d', 0aH, 00H        ; `string'
 86 ; Function compile flags: /Odtp
 87 CONST    ENDS
 88 ;    COMDAT ??R<lambda0>@?A0x428ab923@@QBEXXZ
 89 _TEXT    SEGMENT
 90 _this$ = -4                        ; size = 4
 91 ??R<lambda0>@?A0x428ab923@@QBEXXZ PROC            ; `anonymous namespace'::<lambda0>::operator(), COMDAT
 92 ; _this$ = ecx
 93 
 94 6    :     auto ptr = [a]{
 95 
 96     push    ebp
 97     mov    ebp, esp
 98     push    ecx
 99     mov    DWORD PTR _this$[ebp], ecx
100 
101 7    :         printf("%d\n",a);
102 
103     mov    eax, DWORD PTR _this$[ebp]
104     mov    ecx, DWORD PTR [eax]
105     push    ecx
106     push    OFFSET ??_C@_03PMGGPEJJ@?$CFd?6?$AA@
107     call    _printf
108     add    esp, 8
109 
110 8    :     };
111 
112     mov    esp, ebp
113     pop    ebp
114     ret    0
115 ??R<lambda0>@?A0x428ab923@@QBEXXZ ENDP            ; `anonymous namespace'::<lambda0>::operator()
116 _TEXT    ENDS
117 END
118 
和上面的直接調(diào)用并無差別,因?yàn)橐粋€匿名函數(shù)含有一個隱藏的對象.

應(yīng)此__asm call ptr;這樣調(diào)用是錯誤的!因?yàn)槟銦o法用call指令來調(diào)用一個對象的成員函數(shù).
posted on 2011-02-17 16:32 lwch 閱讀(2694) 評論(0)  編輯 收藏 引用 所屬分類: 其他

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美黑人在线播放| 欧美在线啊v| 裸体一区二区| 欧美亚洲在线视频| 欧美日韩亚洲视频一区| 欧美一区二区三区的| 亚洲一区二区在线免费观看| 噜噜噜躁狠狠躁狠狠精品视频| 午夜精品久久久久久久久| 亚洲欧洲精品一区二区三区 | 欧美国产日韩精品| 欧美伊人久久大香线蕉综合69| 99成人在线| 欧美一区二区久久久| 尤物yw午夜国产精品视频明星| 亚洲啪啪91| 欧美大片va欧美在线播放| 国产农村妇女精品| 亚洲国产高清在线| 国产亚洲成精品久久| 欧美在线一二三四区| 老司机午夜精品视频| 亚洲无亚洲人成网站77777| 欧美性开放视频| 亚洲福利一区| 亚洲国产日韩欧美| 欧美日韩国产页| 亚洲视频一区二区| 狠狠久久五月精品中文字幕| 欧美大片网址| 欧美亚洲免费高清在线观看| 亚洲激情社区| 欧美在线亚洲| 国产精品毛片一区二区三区| 亚洲伦理网站| 久久福利一区| 日韩视频在线观看免费| 国产欧美精品一区二区色综合 | 亚洲国产精品一区二区第一页| 嫩草国产精品入口| 亚洲综合欧美日韩| 国产精品豆花视频| 久久免费国产| 国产精品一区一区三区| 亚洲免费在线观看视频| 亚洲剧情一区二区| 欧美日韩精品免费观看视频完整| 一区二区三区国产在线| 亚洲欧美日韩国产中文在线| 欧美三级网址| 亚洲国产精品久久久久婷婷老年 | 亚洲欧美日韩一区二区三区在线观看| 国产在线精品一区二区中文| 亚洲无线视频| 欧美韩日一区二区三区| 亚洲乱码国产乱码精品精98午夜| 欧美日韩色婷婷| 亚洲第一黄色网| 一区二区三区久久久| 亚洲二区在线观看| 亚洲人成毛片在线播放女女| 狠狠色伊人亚洲综合成人| 亚洲国产美女| 一区二区三区免费观看| 欧美黑人多人双交| 一区二区免费在线播放| 一区二区福利| 91久久夜色精品国产九色| 久久综合伊人77777| 亚洲欧美日韩一区二区三区在线观看| 欧美高清视频免费观看| 黄色成人免费观看| 一区二区三区自拍| 亚洲黄一区二区三区| 91久久精品国产91性色| 亚洲卡通欧美制服中文| 欧美成人免费视频| 一本一本a久久| 欧美高清在线视频观看不卡| 久久午夜视频| 韩国一区电影| 亚洲永久视频| 久久久久高清| 亚洲一区二区三区精品在线观看| 久久精品在线视频| 欧美日韩激情小视频| 国产亚洲美州欧州综合国| 亚洲电影下载| 一区二区三区精密机械公司 | 亚洲国产成人精品久久| 国产一区二区中文| 亚洲少妇在线| 日韩午夜在线播放| 日韩午夜电影在线观看| 久久国产精品久久久久久电车| 久久精品夜夜夜夜久久| 久久久国产91| 在线欧美影院| 久久一二三区| 午夜一区在线| 亚洲国产三级| 亚洲福利专区| 欧美aⅴ99久久黑人专区| 一区二区欧美精品| 国产精品国产a级| 久久久国产精品亚洲一区| 欧美精品偷拍| 黄色在线成人| 久久午夜羞羞影院免费观看| 欧美成人黄色小视频| 亚洲电影专区| 欧美人成在线视频| 夜夜爽夜夜爽精品视频| 老牛影视一区二区三区| 欧美日韩国产在线| 欧美自拍偷拍午夜视频| 久久人人爽人人爽爽久久| 亚洲二区三区四区| 亚洲国产毛片完整版| 国语自产在线不卡| 老牛嫩草一区二区三区日本| 欧美极品一区| 久久免费视频观看| 国产精品对白刺激久久久| 一区二区三区精密机械公司| 亚洲一区二区三区乱码aⅴ| 国产综合色一区二区三区| 欧美成人首页| 好看的亚洲午夜视频在线| 久久久999国产| 欧美激情第4页| 欧美一级播放| 国自产拍偷拍福利精品免费一| 亚洲免费综合| 久久久久久久999精品视频| 久久一区二区三区国产精品 | 欧美日韩免费一区二区三区视频 | 9久草视频在线视频精品| 日韩网站在线看片你懂的| 激情综合中文娱乐网| 久久成人免费日本黄色| 久久成人精品| 国产欧美日韩激情| 性欧美暴力猛交69hd| 久久精品亚洲精品国产欧美kt∨| 国产精品毛片一区二区三区| 亚洲午夜三级在线| 亚洲欧美一区二区精品久久久| 欧美四级电影网站| 亚洲一级网站| 久久美女性网| 亚洲欧洲一区二区三区在线观看| 欧美电影在线| 一本色道久久综合狠狠躁篇怎么玩 | 欧美~级网站不卡| 亚洲成人在线免费| 亚洲国产精品高清久久久| 久久久久久久网站| 欧美成人一二三| 制服丝袜激情欧洲亚洲| 国产精品日韩精品| 久久青青草综合| 日韩亚洲综合在线| 久久九九99视频| 亚洲毛片在线看| 国产精品综合久久久| 久久综合色88| 这里只有精品视频| 免费成人黄色av| 亚洲午夜一区| 在线观看成人网| 国产精品欧美激情| 免费观看在线综合| 亚洲欧美一区二区三区极速播放 | 亚洲欧美视频一区| 亚洲高清久久| 国产日韩精品一区二区浪潮av| 免费亚洲电影| 午夜精品久久久久久久久久久 | 亚洲电影免费在线| 性欧美videos另类喷潮| 美女91精品| 国产欧美一区二区精品仙草咪 | 亚洲欧美在线观看| 影音先锋另类| 国产精品久久久爽爽爽麻豆色哟哟| 久久久91精品| 亚洲一区二区三区免费观看| 欧美激情视频给我| 久久久av网站| 亚洲欧美国产不卡| 99成人精品| 亚洲人成7777| 在线看视频不卡| 国产亚洲一级| 国产精品社区| 国产精品人成在线观看免费 | 欧美成人午夜激情| 久久久久高清| 久久精品国产久精国产爱|