{"id":1401,"date":"2023-09-29T02:09:10","date_gmt":"2023-09-28T17:09:10","guid":{"rendered":"https:\/\/xn--k10aa.com\/?p=1401"},"modified":"2024-10-19T23:09:34","modified_gmt":"2024-10-19T14:09:34","slug":"c-lambda-note","status":"publish","type":"post","link":"https:\/\/remoooo.com\/en\/c-lambda-note\/","title":{"rendered":"C++ Lambda Note"},"content":{"rendered":"\n<p>\u6211\u4e5f\u662f\u83dc\u9e21QAQ\uff0c\u6d45\u6d45\u5206\u4eab\u4e00\u4e0b\u5b66\u4e60C++Lambda\u7684\u7b14\u8bb0\u3002\u501f\u6b64\u7ba1\u4e2d\u7aa5\u8c79\uff0c\u5b9b\u5982\u900f\u8fc7\u72ed\u7f1d\u7aa5\u63a2\u77e5\u4e4e\u5927\u4f6c\u4eec\u9068\u6e38\u4e8e\u667a\u6167\u7684\u5e7f\u9614\u5929\u5730\uff0c\u5199\u9519\u4e86\u8bf7\u5927\u4f6c\u4eec\u65a7\u6b63\u3002<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Lambda\u8868\u8fbe\u5f0f\u662fC++11\u6807\u51c6\u4e2d\u5f15\u5165\u7684\uff0c\u5141\u8bb8\u5728\u4ee3\u7801\u4e2d\u5b9a\u4e49\u533f\u540d\u51fd\u6570\u3002\u672c\u6587\u7684\u6bcf\u4e00\u4e2a\u7ae0\u8282\u90fd\u4f1a\u6709\u5927\u91cf\u7684\u4ee3\u7801\u6848\u4f8b\u5e2e\u52a9\u7406\u89e3\u3002 \u672c\u6587\u90e8\u5206\u4ee3\u7801\u53c2\u8003\u4e86 <a href=\"https:\/\/learn.microsoft.com\/en-us\/cpp\/cpp\/lambda-expressions-in-cpp?view=msvc-170&amp;source=docs\">\u5fae\u8f6f\u5b98\u65b9\u6587\u6863 | Lambda expressions in C++ | Microsoft Learn<\/a>\u3002<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">\u76ee\u5f55<\/h2>\n\n\n\n<p><strong>\u57fa\u7840\u7bc7<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>1. Lambda\u57fa\u672c\u8bed\u6cd5<\/li>\n\n\n\n<li>2. \u5982\u4f55\u4f7f\u7528Lambda\u8868\u8fbe\u5f0f<\/li>\n\n\n\n<li>3. \u8be6\u7ec6\u8ba8\u8bba\u6355\u83b7\u5217\u8868<\/li>\n\n\n\n<li>4. mutable\u5173\u952e\u5b57<\/li>\n\n\n\n<li>5. Lambda\u8fd4\u56de\u503c\u63a8\u5bfc<\/li>\n\n\n\n<li>6. \u5d4c\u5957Lambda<\/li>\n\n\n\n<li>7. Lambda\u3001std:function\u4e0e\u59d4\u6258<\/li>\n\n\n\n<li>8. Lambda\u5728\u5f02\u6b65\u548c\u5e76\u53d1\u7f16\u7a0b\u4e2d<\/li>\n\n\n\n<li>9. \u6cdb\u578bLambda\uff08C++14\uff09<ol start=\"10\"><li>Lambda\u7684\u4f5c\u7528\u57df<\/li><\/ol>\n<ol class=\"wp-block-list\" start=\"11\">\n<li>\u5b9e\u8df5<\/li>\n<\/ol>\n<\/li>\n<\/ul>\n\n\n\n<p><strong>\u4e2d\u7ea7\u7bc7<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>1. Lambda\u7684\u5e95\u5c42\u5b9e\u73b0<\/li>\n\n\n\n<li>2. Lambda\u7684\u7c7b\u578b\u548cdecltype\u4e0e\u6761\u4ef6\u7f16\u8bd1<\/li>\n\n\n\n<li>3. Lambda\u5728\u65b0\u6807\u51c6\u4e2d\u7684\u8fdb\u5316<\/li>\n\n\n\n<li>4. \u72b6\u6001\u4fdd\u6301\u7684Lambda<\/li>\n\n\n\n<li>5. \u4f18\u5316\u4e0eLambda<\/li>\n\n\n\n<li>6. \u4e0e\u5176\u4ed6\u7f16\u7a0b\u8303\u5f0f\u7684\u7ed3\u5408<\/li>\n\n\n\n<li>7. Lambda\u4e0e\u5f02\u5e38\u5904\u7406<\/li>\n<\/ul>\n\n\n\n<p><strong>\u8fdb\u9636\u7bc7<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>1. Lambda\u4e0enoexcept<\/li>\n\n\n\n<li>2. Lambda\u4e2d\u7684\u6a21\u677f\u53c2\u6570\uff08C++20\u7279\u6027\uff09<\/li>\n\n\n\n<li>3. Lambda\u7684\u53cd\u5c04<\/li>\n\n\n\n<li>4. \u8de8\u5e73\u53f0\u548cABI\u7684\u95ee\u9898<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u57fa\u7840\u7bc7<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1. Lambda\u57fa\u672c\u8bed\u6cd5<\/h3>\n\n\n\n<p>Lambda\u57fa\u672c\u957f\u8fd9\u6837\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;\u6355\u83b7\u5b50\u53e5](\u53c2\u6570\u5217\u8868) -&gt; \u8fd4\u56de\u7c7b\u578b {\n    \/\/ \u51fd\u6570\u4f53\n}\n&#91; capture_clause ] ( parameters ) -&gt; return_type {\n    \/\/ function_body\n}<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6355\u83b7\u5b50\u53e5\uff08<strong>capture_clause<\/strong>\uff09\u51b3\u5b9a\u4e86\u5916\u90e8\u4f5c\u7528\u57df\u4e2d\u7684\u54ea\u4e9b\u53d8\u91cf\u5c06\u88ab\u8fd9\u4e2alambda\u6355\u83b7\u4ee5\u53ca\u5982\u4f55\u6355\u83b7\uff08\u901a\u8fc7\u503c\u3001\u5f15\u7528\u6216\u4e0d\u6355\u83b7\uff09\u3002\u4e0b\u4e00\u7ae0\u6211\u4eec\u8be6\u7ec6\u8ba8\u8bba\u6355\u83b7\u5b50\u53e5\u3002<\/li>\n\n\n\n<li>\u53c2\u6570\u5217\u8868\uff08<strong>parameters<\/strong>\uff09\u548c\u51fd\u6570\u4f53\uff08<strong>function_body<\/strong>\uff09\u8ddf\u666e\u901a\u51fd\u6570\u4e00\u6837\uff0c\u6ca1\u5565\u533a\u522b\u3002<\/li>\n\n\n\n<li>\u8fd4\u56de\u7c7b\u578b\uff08<strong>return_type<\/strong>\uff09\u7a0d\u5fae\u6709\u4e9b\u4e0d\u540c\u3002\u5982\u679c\u51fd\u6570\u4f53\u5305\u542b\u591a\u6761\u8bed\u53e5\uff0c\u4e14\u9700\u8981\u8fd4\u56de\u503c\uff0c\u5219\u5fc5\u987b\u663e\u5f0f\u6307\u5b9a\u8fd4\u56de\u7c7b\u578b\uff0c\u9664\u975e\u6240\u6709 return \u8bed\u53e5\u90fd\u8fd4\u56de\u76f8\u540c\u7c7b\u578b\uff0c\u90a3\u4e48\u8fd4\u56de\u7c7b\u578b\u4e5f\u53ef\u4ee5\u88ab\u81ea\u52a8\u63a8\u65ad\u3002<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2. \u5982\u4f55\u4f7f\u7528Lambda\u8868\u8fbe\u5f0f<\/h3>\n\n\n\n<p>\u8bed\u6cd5\u4f8b\u5b50\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u4e00\u4e2a\u4e0d\u6355\u83b7\u4efb\u4f55\u5916\u90e8\u53d8\u91cf\u3001\u4e0d\u63a5\u53d7\u53c2\u6570\u3001\u6ca1\u6709\u8fd4\u56de\u503c\u7684lambda\nauto greet = &#91;] { std::cout &lt;&lt; \"Hello, World!\" &lt;&lt; std::endl; };\n\n\/\/ \u4e00\u4e2a\u901a\u8fc7\u5f15\u7528\u6355\u83b7\u5916\u90e8\u53d8\u91cf\u3001\u63a5\u53d7\u4e00\u4e2aint\u53c2\u6570\u3001\u8fd4\u56deint\u7c7b\u578b\u7684lambda\nint x = 42;\nauto add_to_x = &#91;&amp;x](int y) -&gt; int { return x + y; };\n\n\/\/ \u4e00\u4e2a\u901a\u8fc7\u503c\u6355\u83b7\u6240\u6709\u5916\u90e8\u53d8\u91cf\u3001\u63a5\u53d7\u4e24\u4e2a\u53c2\u6570\u3001\u8fd4\u56de\u7c7b\u578b\u88ab\u81ea\u52a8\u63a8\u65ad\u7684lambda\nint a = 1, b = 2;\nauto sum = &#91;=](int x, int y) { return a + b + x + y; };\n\n\/\/ \u4f7f\u7528\u521d\u59cb\u5316\u6355\u83b7\u521b\u5efa\u65b0\u53d8\u91cf\u7684lambda\uff08C++14\u7279\u6027\uff09\nauto multiply = &#91;product = a * b](int scalar) { return product * scalar; };<\/code><\/pre>\n\n\n\n<p>\u5b9e\u9645\u4f8b\u5b50\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u4f5c\u4e3a\u6392\u5e8f\u51c6\u5219<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u4f5c\u4e3a\u6392\u5e8f\u51c6\u5219\n#include &lt;algorithm&gt;\n#include &lt;vector&gt;\n#include &lt;iostream&gt;\n\nint main() {\n    std::vector&lt;int&gt; v{4, 1, 3, 5, 2};\n    std::sort(v.begin(), v.end(), &#91;](int a, int b) {\n        return a &lt; b; \/\/ \u5347\u5e8f\u6392\u5217\n    });\n\n    for (int i : v) {\n        std::cout &lt;&lt; i &lt;&lt; ' ';\n    }\n    \/\/ \u8f93\u51fa\uff1a1 2 3 4 5\n}<\/code><\/pre>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u7528\u4e8eforEach\u64cd\u4f5c<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;vector&gt;\n#include &lt;iostream&gt;\n#include &lt;algorithm&gt;\n\nint main() {\n    std::vector&lt;int&gt; v{1, 2, 3, 4, 5};\n    std::for_each(v.begin(), v.end(), &#91;](int i) {\n        std::cout &lt;&lt; i * i &lt;&lt; ' '; \/\/ \u6253\u5370\u6bcf\u4e2a\u6570\u5b57\u7684\u5e73\u65b9\n    });\n    \/\/ \u8f93\u51fa\uff1a1 4 9 16 25\n}<\/code><\/pre>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u7528\u4e8e\u7d2f\u79ef\u51fd\u6570<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;iostream&gt;\n#include &lt;vector&gt;\n#include &lt;numeric&gt;\n\nint main() {\n    std::vector&lt;int&gt; v{1, 2, 3, 4, 5};\n    int sum = std::accumulate(v.begin(), v.end(), 0, &#91;](int a, int b) {\n        return a + b; \/\/ \u6c42\u548c\n    });\n\n    std::cout &lt;&lt; sum &lt;&lt; std::endl; \/\/ \u8f93\u51fa\uff1a15\n}<\/code><\/pre>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u7528\u4e8e\u7ebf\u7a0b\u6784\u9020\u51fd\u6570<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;thread&gt;\n#include &lt;iostream&gt;\n\nint main() {\n    int x = 10;\n    std::thread t(&#91;x]() {\n        std::cout &lt;&lt; \"Value in thread: \" &lt;&lt; x &lt;&lt; std::endl;\n    });\n    t.join(); \/\/ \u8f93\u51fa\uff1aValue in thread: 10\n    \/\/ \u6ce8\u610f\uff1a\u7ebf\u7a0b\u4e2d\u4f7f\u7528\u7684x\u662f\u5728\u521b\u5efa\u7ebf\u7a0b\u65f6\u6309\u503c\u6355\u83b7\u7684\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3. \u8be6\u7ec6\u8ba8\u8bba\u6355\u83b7\u5217\u8868\uff08Capture List\uff09<\/h3>\n\n\n\n<p>\u6355\u83b7\u5217\u8868\u662f\u53ef\u9009\u7684\u3002\u6307\u5b9alambda\u8868\u8fbe\u5f0f\u5185\u90e8\u53ef\u4ee5\u8bbf\u95ee\u7684\u5916\u90e8\u53d8\u91cf\u3002\u88ab\u5f15\u7528\u7684\u5916\u90e8\u53d8\u91cf\u53ef\u4ee5\u5728lambda\u8868\u8fbe\u5f0f\u5185\u90e8\u88ab\u4fee\u6539\uff0c\u4f46\u662f\u6309\u503c\u6355\u83b7\u7684\u5916\u90e8\u53d8\u91cf\u662f\u4e0d\u53ef\u4fee\u6539\u7684\uff0c\u4e5f\u5c31\u662f\u8bf4\uff0c\u6709\u4e0e\u53f7 (&amp;) \u524d\u7f00\u7684\u53d8\u91cf\u901a\u8fc7\u5f15\u7528\u8fdb\u884c\u8bbf\u95ee\uff0c\u6ca1\u6709\u8be5\u524d\u7f00\u7684\u53d8\u91cf\u901a\u8fc7\u503c\u8fdb\u884c\u8bbf\u95ee\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4e0d\u6355\u83b7\u4efb\u4f55\u5916\u90e8\u53d8\u91cf<\/strong>:<\/li>\n<\/ol>\n\n\n\n<p>cpp []{ \/<em>\u2026<\/em>\/ }<\/p>\n\n\n\n<p>\u8fd9\u4e2alambda\u4e0d\u6355\u83b7\u4efb\u4f55\u5916\u90e8\u4f5c\u7528\u57df\u4e2d\u7684\u53d8\u91cf\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u9ed8\u8ba4\u6355\u83b7\u6240\u6709\u5916\u90e8\u53d8\u91cf\uff08\u901a\u8fc7\u5f15\u7528\uff09<\/strong>:<\/li>\n<\/ol>\n\n\n\n<p>cpp [&amp;]{ \/<em>\u2026<\/em>\/ }<\/p>\n\n\n\n<p>\u8fd9\u4e2alambda\u6355\u83b7\u6240\u6709\u5916\u90e8\u4f5c\u7528\u57df\u4e2d\u7684\u53d8\u91cf\uff0c\u5e76\u901a\u8fc7\u5f15\u7528\u6355\u83b7\u5b83\u4eec\u3002\u5982\u679c\u6355\u83b7\u7684\u53d8\u91cf\u5728lambda\u88ab\u8c03\u7528\u65f6\u5df2\u7ecf\u9500\u6bc1\u6216\u8d85\u51fa\u4f5c\u7528\u57df\uff0c\u5219\u4f1a\u4ea7\u751f\u672a\u5b9a\u4e49\u884c\u4e3a\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u9ed8\u8ba4\u6355\u83b7\u6240\u6709\u5916\u90e8\u53d8\u91cf\uff08\u901a\u8fc7\u503c\uff09<\/strong>:<\/li>\n<\/ol>\n\n\n\n<p>cpp [=]{ \/<em>\u2026<\/em>\/ }<\/p>\n\n\n\n<p>\u8fd9\u4e2alambda\u901a\u8fc7\u503c\u6355\u83b7\u6240\u6709\u5916\u90e8\u4f5c\u7528\u57df\u4e2d\u7684\u53d8\u91cf\uff0c\u8fd9\u610f\u5473\u7740\u5b83\u4f7f\u7528\u7684\u662f\u53d8\u91cf\u7684\u526f\u672c\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u663e\u5f0f\u6355\u83b7\u7279\u5b9a\u53d8\u91cf\uff08\u901a\u8fc7\u503c\uff09<\/strong>:<\/li>\n<\/ol>\n\n\n\n<p>cpp [x]{ \/<em>\u2026<\/em>\/ }<\/p>\n\n\n\n<p>\u8fd9\u4e2alambda\u901a\u8fc7\u503c\u6355\u83b7\u5916\u90e8\u53d8\u91cfx\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u663e\u5f0f\u6355\u83b7\u7279\u5b9a\u53d8\u91cf\uff08\u901a\u8fc7\u5f15\u7528\uff09<\/strong>:<\/li>\n<\/ol>\n\n\n\n<p>cpp [&amp;x]{ \/<em>\u2026<\/em>\/ }<\/p>\n\n\n\n<p>\u8fd9\u4e2alambda\u901a\u8fc7\u5f15\u7528\u6355\u83b7\u5916\u90e8\u53d8\u91cfx\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6df7\u5408\u6355\u83b7\uff08\u901a\u8fc7\u503c\u548c\u5f15\u7528\uff09<\/strong>:<\/li>\n<\/ol>\n\n\n\n<p>cpp [x, &amp;y]{ \/<em>\u2026<\/em>\/ }<\/p>\n\n\n\n<p>\u8fd9\u4e2alambda\u901a\u8fc7\u503c\u6355\u83b7\u53d8\u91cfx\uff0c\u901a\u8fc7\u5f15\u7528\u6355\u83b7\u53d8\u91cfy\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u9ed8\u8ba4\u901a\u8fc7\u503c\u6355\u83b7\uff0c\u4f46\u67d0\u4e9b\u53d8\u91cf\u901a\u8fc7\u5f15\u7528<\/strong>:<\/li>\n<\/ol>\n\n\n\n<p>cpp [=, &amp;x, &amp;y]{ \/<em>\u2026<\/em>\/ }<\/p>\n\n\n\n<p>\u8fd9\u4e2alambda\u9ed8\u8ba4\u901a\u8fc7\u503c\u6355\u83b7\u6240\u6709\u5916\u90e8\u53d8\u91cf\uff0c\u4f46\u901a\u8fc7\u5f15\u7528\u6355\u83b7\u53d8\u91cfx\u548cy\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u9ed8\u8ba4\u901a\u8fc7\u5f15\u7528\u6355\u83b7\uff0c\u4f46\u67d0\u4e9b\u53d8\u91cf\u901a\u8fc7\u503c<\/strong>:<\/li>\n<\/ol>\n\n\n\n<p>cpp [&amp;, x, y]{ \/<em>\u2026<\/em>\/ }<\/p>\n\n\n\n<p>\u8fd9\u4e2alambda\u9ed8\u8ba4\u901a\u8fc7\u5f15\u7528\u6355\u83b7\u6240\u6709\u5916\u90e8\u53d8\u91cf\uff0c\u4f46\u901a\u8fc7\u503c\u6355\u83b7\u53d8\u91cfx\u548cy\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6355\u83b7this\u6307\u9488<\/strong>:<\/li>\n<\/ol>\n\n\n\n<p>cpp [this]{ \/<em>\u2026<\/em>\/ }<\/p>\n\n\n\n<p>\u8fd9\u5141\u8bb8lambda\u8868\u8fbe\u5f0f\u6355\u83b7\u7c7b\u6210\u5458\u51fd\u6570\u7684this\u6307\u9488\uff0c\u4ece\u800c\u53ef\u4ee5\u8bbf\u95ee\u7c7b\u7684\u6210\u5458\u53d8\u91cf\u548c\u51fd\u6570\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4ee5\u521d\u59cb\u5316\u8868\u8fbe\u5f0f\u6355\u83b7 \uff08C++14\u8d77\uff09 &#8211; \u6cdb\u578blambda\u6355\u83b7<\/strong>: cpp [x = 42]{ \/<em>\u2026<\/em>\/ } \u521b\u5efa\u4e86\u4e00\u4e2a\u5728lambda\u5185\u90e8\u7684\u533f\u540d\u53d8\u91cf x \uff0c\u53ef\u4ee5\u5728lambda\u7684\u51fd\u6570\u4f53\u4e2d\u4f7f\u7528\u8fd9\u4e2a\u53d8\u91cf\u3002\u8fd9\u4e2a\u4e1c\u897f\u8fd8\u662f\u6bd4\u8f83\u6709\u7528\u7684\uff0c\u6bd4\u5982\u53ef\u4ee5\u76f4\u63a5\u7528\u79fb\u52a8\u8bed\u4e49\u8f6c\u79fb std::unique_ptr \uff0c\u5728\u4e0b\u9762\u300c\u5f15\u7528\u300d\u4e2d\u8be6\u7ec6\u8ba8\u8bba\u3002<\/li>\n\n\n\n<li><strong>\u6355\u83b7\u661f\u53f7this\uff08C++17\u8d77\uff09<\/strong>: cpp [<em>this]{ \/<\/em>\u2026*\/ } \u8fd9\u4e2alambda\u901a\u8fc7\u503c\u6355\u83b7\u5f53\u524d\u5bf9\u8c61\uff08\u5176\u6240\u5728\u7684\u7c7b\u7684\u5b9e\u4f8b\uff09\u3002\u8fd9\u6837\u505a\u53ef\u4ee5\u907f\u514d\u5728lambda\u751f\u547d\u5468\u671f\u5185this\u6307\u9488\u53d8\u4e3a\u60ac\u6302\u6307\u9488\u7684\u98ce\u9669\u3002\u5728C++17\u4e4b\u524d\uff0c\u53ef\u4ee5\u901a\u8fc7\u5f15\u7528\u83b7\u53d6this\uff0c\u4f46\u662f\u8fd9\u6709\u4e00\u4e2a\u6f5c\u5728\u7684\u5185\u5b58\u98ce\u9669\uff0c\u4e5f\u5c31\u662f\u5982\u679cthis\u7684\u751f\u547d\u5468\u671f\u7ed3\u675f\u4e86\uff0c\u5c31\u4f1a\u9020\u6210\u5185\u5b58\u6cc4\u6f0f\u3002\u7528\u4e86\u661f\u53f7this\uff0c\u5c31\u76f8\u5f53\u4e8e\u6df1\u5ea6\u62f7\u8d1d\u4e86\u4e00\u4efd\u5f53\u524d\u7684\u5bf9\u8c61\u3002<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>std::unique_ptr \u662f\u4e00\u4e2a\u72ec\u5360\u6240\u6709\u6743\u7684\u667a\u80fd\u6307\u9488\uff0c\u5176\u8bbe\u8ba1\u521d\u8877\u5c31\u662f\u786e\u4fdd\u540c\u4e00\u65f6\u95f4\u5185\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f53\u53ef\u4ee5\u62e5\u6709\u5bf9\u5bf9\u8c61\u7684\u6240\u6709\u6743\u3002\u56e0\u6b64\uff0cstd::unique_ptr \u4e0d\u80fd\u88ab\u590d\u5236\uff0c\u53ea\u80fd\u88ab\u79fb\u52a8\u3002 \u5982\u679c\u4f60\u60f3\u901a\u8fc7\u503c\u6765\u6355\u83b7\uff0c\u90a3\u7f16\u8bd1\u5668\u4f1a\u88ab\u62a5\u9519\u634f\u3002 \u5982\u679c\u901a\u8fc7\u5f15\u7528\u6355\u83b7\uff0c\u7f16\u8bd1\u5668\u4e0d\u4f1a\u62a5\u9519\u3002\u4f46\u662f\u4f1a\u6709\u6f5c\u5728\u7684\u95ee\u9898\uff0c\u6211\u60f3\u5230\u4e86\u4e09\u79cd\uff1a<\/p>\n<\/blockquote>\n\n\n\n<ol class=\"wp-block-list\">\n<li>std::unique_ptr \u7684\u751f\u547d\u6bd4lambda\u5148\u7ed3\u675f\u4e86\u3002\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0clambda\u5185\u90e8\u8bbf\u95ee\u8fd9\u4e2a\u5df2\u7ecf\u9500\u6bc1\u7684 std::unique_ptr \u4f1a\u5bfc\u81f4\u7a0b\u5e8f\u5d29\u6e83\u3002<\/li>\n\n\n\n<li>std::unique_ptr\u5728\u6355\u83b7\u540e\u88ab\u79fb\u52a8\u4e86\uff0c\u90a3\u4e48\u5728lambda\u7684\u90a3\u4e2a\u5f15\u7528\u5c31\u662f\u7a7a\u7684\uff0c\u8fdb\u800c\u5bfc\u81f4\u7a0b\u5e8f\u5d29\u6e83\u3002<\/li>\n\n\n\n<li>\u591a\u7ebf\u7a0b\u73af\u5883\u4e2d\uff0c\u4e0a\u9762\u8fd9\u4e24\u4e2a\u95ee\u9898\u4f1a\u66f4\u52a0\u9891\u7e41\u5730\u51fa\u73b0\u3002 \u4e3a\u4e86\u907f\u514d\u8fd9\u4e9b\u95ee\u9898\uff0c\u53ef\u4ee5\u8003\u8651\u901a\u8fc7\u503c\u6355\u83b7\uff0c\u5373\u663e\u5f0f\u4f7f\u7528 std::move \u6765\u8f6c\u79fb\u6240\u6709\u6743\u3002\u591a\u7ebf\u7a0b\u73af\u5883\u4e2d\u5c31\u52a0\u9501\u3002<\/li>\n<\/ol>\n\n\n\n<p>\u4ee3\u7801\u6848\u4f8b\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u4f7f\u7528Lambda\u4f5c\u4e3a\u56de\u8c03\u51fd\u6570 &#8211; \u8be5\u4f8b\u5b50\u4e5f\u6d89\u53ca\u5230 function()<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;iostream&gt;\n#include &lt;functional&gt;\n\n\/\/ \u5047\u8bbe\u6709\u4e00\u4e2a\u51fd\u6570\uff0c\u5b83\u5728\u67d0\u4e2a\u64cd\u4f5c\u5b8c\u6210\u540e\u8c03\u7528\u56de\u8c03\u51fd\u6570\nvoid performOperationAsync(std::function&lt;void(int)&gt; callback) {\n    \/\/ \u5f02\u6b65\u64cd\u4f5c...\n    int result = 42; \/\/ \u5047\u8bbe\u8fd9\u662f\u5f02\u6b65\u64cd\u4f5c\u7684\u7ed3\u679c\n    callback(result); \/\/ \u8c03\u7528\u56de\u8c03\u51fd\u6570\n}\n\nint main() {\n    int capture = 100;\n    performOperationAsync(&#91;capture](int result) {\n        std::cout &lt;&lt; \"Async operation result: \" &lt;&lt; result\n                  &lt;&lt; \" with captured value: \" &lt;&lt; capture &lt;&lt; std::endl;\n    });\n}<\/code><\/pre>\n\n\n\n<ol class=\"wp-block-list\" start=\"2\">\n<li>\u4e0e\u667a\u80fd\u6307\u9488\u4e00\u8d77\u4f7f\u7528 &#8211; \u8be5\u4f8b\u5b50\u4e5f\u6d89\u53ca\u5230 mutable \u5173\u952e\u5b57<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;iostream&gt;\n#include &lt;memory&gt;\n\nvoid processResource(std::unique_ptr&lt;int&gt; ptr) {\n    \/\/ \u505a\u4e00\u4e9b\u5904\u7406\n    std::cout &lt;&lt; \"Processing resource with value \" &lt;&lt; *ptr &lt;&lt; std::endl;\n}\n\nint main() {\n    auto ptr = std::make_unique&lt;int&gt;(10);\n\n    \/\/ \u4f7f\u7528Lambda\u5ef6\u8fdf\u8d44\u6e90\u5904\u7406\n    auto deferredProcess = &#91;p = std::move(ptr)]() {\n        processResource(std::move(p));\n    };\n\n    \/\/ \u505a\u4e00\u4e9b\u5176\u4ed6\u64cd\u4f5c...\n    \/\/ ...\n\n    deferredProcess(); \/\/ \u6700\u7ec8\u5904\u7406\u8d44\u6e90\n}<\/code><\/pre>\n\n\n\n<ol class=\"wp-block-list\" start=\"3\">\n<li>\u5728\u591a\u7ebf\u7a0b\u4e2d\u540c\u6b65\u6570\u636e\u8bbf\u95ee<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>int main() {\n    std::vector&lt;int&gt; data;\n    std::mutex data_mutex;\n    std::vector&lt;std::thread&gt; threadsPool;\n\n    \/\/ Lambda\u7528\u4e8e\u6dfb\u52a0\u6570\u636e\u5230vector\uff0c\u786e\u4fdd\u7ebf\u7a0b\u5b89\u5168\n    auto addData = &#91;&amp;](int value) {\n        std::lock_guard&lt;std::mutex&gt; lock(data_mutex);\n        data.push_back(value);\n        std::cout &lt;&lt; \"Added \" &lt;&lt; value &lt;&lt; \" to the data structure.\" &lt;&lt; std::endl;\n    };\n\n    threadsPool.reserve(10);\n    for (int i = 0; i &lt; 10; ++i) {\n        threadsPool.emplace_back(addData, i);\n    }\n\n    \/\/ \u7b49\u5f85\u6240\u6709\u7ebf\u7a0b\u5b8c\u6210\n    for (auto&amp; thread : threadsPool) {\n        thread.join();\n    }\n}<\/code><\/pre>\n\n\n\n<ol class=\"wp-block-list\" start=\"4\">\n<li>Lambda\u5728\u8303\u56f4\u67e5\u8be2\u4e2d\u7684\u5e94\u7528<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;algorithm&gt;\n\nint main() {\n    std::vector&lt;int&gt; v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};\n    int lower_bound = 3;\n    int upper_bound = 7;\n\n    \/\/ \u4f7f\u7528Lambda\u627e\u5230\u7279\u5b9a\u8303\u56f4\u5185\u7684\u6240\u6709\u6570\n    auto range_begin = std::find_if(v.begin(), v.end(), &#91;lower_bound](int x) { return x &gt;= lower_bound; });\n    auto range_end = std::find_if(range_begin, v.end(), &#91;upper_bound](int x) { return x &gt; upper_bound; });\n\n    std::cout &lt;&lt; \"Range: \";\n    std::for_each(range_begin, range_end, &#91;](int x) { std::cout &lt;&lt; x &lt;&lt; ' '; });\n    std::cout &lt;&lt; std::endl;\n}<\/code><\/pre>\n\n\n\n<ol class=\"wp-block-list\" start=\"5\">\n<li>\u5ef6\u8fdf\u6267\u884c<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;chrono&gt;\n\n\/\/ \u6a21\u62df\u4e00\u4e2a\u53ef\u80fd\u9700\u8981\u8017\u65f6\u7684\u64cd\u4f5c\nvoid expensiveOperation(int data) {\n    \/\/ \u6a21\u62df\u8017\u65f6\u64cd\u4f5c\n    std::this_thread::sleep_for(std::chrono::seconds(1));\n    std::cout &lt;&lt; \"Processed data: \" &lt;&lt; data &lt;&lt; std::endl;\n}\n\nint main() {\n    std::vector&lt;std::function&lt;void()&gt;&gt; deferredOperations;\n\n    deferredOperations.reserve(10);\n    \/\/ \u5047\u8bbe\u8fd9\u662f\u4e00\u4e2a\u9700\u8981\u6267\u884c\u8017\u65f6\u64cd\u4f5c\u7684\u5faa\u73af\uff0c\u4f46\u6211\u4eec\u4e0d\u60f3\u7acb\u5373\u6267\u884c\u5b83\u4eec\n    for (int i = 0; i &lt; 10; ++i) {\n        \/\/ \u6355\u83b7i\u5e76\u5ef6\u8fdf\u6267\u884c\n        deferredOperations.emplace_back(&#91;i] {\n            expensiveOperation(i);\n        });\n    }\n\n    std::cout &lt;&lt; \"All operations have been scheduled, doing other work now.\" &lt;&lt; std::endl;\n\n    \/\/ \u5047\u8bbe\u73b0\u5728\u662f\u4e00\u4e2a\u8f83\u597d\u7684\u65f6\u95f4\u70b9\u53bb\u6267\u884c\u8fd9\u4e9b\u8017\u65f6\u7684\u64cd\u4f5c\n    for (auto&amp; operation : deferredOperations) {\n        \/\/ \u5728\u4e00\u4e2a\u65b0\u7ebf\u7a0b\u4e0a\u6267\u884cLambda\u8868\u8fbe\u5f0f\u4ee5\u907f\u514d\u963b\u585e\u4e3b\u7ebf\u7a0b\n        std::thread(operation).detach();\n    }\n\n    \/\/ \u7ed9\u7ebf\u7a0b\u4e00\u4e9b\u65f6\u95f4\u6765\u5904\u7406\u64cd\u4f5c\n    std::this_thread::sleep_for(std::chrono::seconds(2));\n    std::cout &lt;&lt; \"Main thread finished.\" &lt;&lt; std::endl;\n}\n\/* \u6ce8\u610f\uff1a\u5728\u5b9e\u9645\u7684\u591a\u7ebf\u7a0b\u7a0b\u5e8f\u4e2d\uff0c\u901a\u5e38\u9700\u8981\u8003\u8651\u7ebf\u7a0b\u540c\u6b65\u548c\u8d44\u6e90\u7ba1\u7406\n\uff0c\u4f8b\u5982\u4f7f\u7528 std::async \u800c\u4e0d\u662f std::thread().detach()\uff0c\n\u4ee5\u53ca\u4f7f\u7528\u9002\u5f53\u7684\u540c\u6b65\u673a\u5236\u5982\u4e92\u65a5\u9501\u548c\u6761\u4ef6\u53d8\u91cf\u6765\u4fdd\u8bc1\u7ebf\u7a0b\u5b89\u5168\u3002\n\u5728\u8fd9\u4e2a\u7b80\u5316\u7684\u4f8b\u5b50\u4e2d\uff0c\u4e3a\u4e86\u4fdd\u6301\u6e05\u6670\u548c\u96c6\u4e2d\u5728\u5ef6\u8fdf\u64cd\u4f5c\u4e0a\uff0c\n\u8fd9\u4e9b\u7ec6\u8282\u88ab\u7701\u7565\u4e86\u3002*\/\n\n\/\/ \u4e0b\u9762\u6f14\u793a\u8fd9\u4e2a\u4f8b\u5b50\u66f4\u5408\u7406\u7684\u7248\u672c\n\n#include &lt;iostream&gt;\n#include &lt;vector&gt;\n#include &lt;future&gt;\n#include &lt;chrono&gt;\n\/\/ \u6a21\u62df\u4e00\u4e2a\u53ef\u80fd\u9700\u8981\u8017\u65f6\u7684\u64cd\u4f5c\nint expensiveOperation(int data) {\n    \/\/ \u6a21\u62df\u8017\u65f6\u64cd\u4f5c\n    std::this_thread::sleep_for(std::chrono::seconds(1));\n    return data * data; \/\/ \u8fd4\u56de\u4e00\u4e9b\u5904\u7406\u7ed3\u679c\n}\nint main() {\n    std::vector&lt;std::future&lt;int&gt;&gt; deferredResults;\n    \/\/ \u542f\u52a8\u591a\u4e2a\u5f02\u6b65\u4efb\u52a1\n    deferredResults.reserve(10);\n    for (int i = 0; i &lt; 10; ++i) {\n        deferredResults.emplace_back(\n            std::async(std::launch::async, expensiveOperation, i)\n        );\n    }\n    std::cout &lt;&lt; \"All operations have been scheduled, doing other work now.\" &lt;&lt; std::endl;\n    \/\/ \u83b7\u53d6\u5f02\u6b65\u4efb\u52a1\u7684\u7ed3\u679c\n    for (auto&amp; future : deferredResults) {\n        \/\/ get() \u4f1a\u963b\u585e\u76f4\u5230\u5f02\u6b65\u64cd\u4f5c\u5b8c\u6210\u5e76\u8fd4\u56de\u7ed3\u679c\n        std::cout &lt;&lt; \"Processed data: \" &lt;&lt; future.get() &lt;&lt; std::endl;\n    }\n    std::cout &lt;&lt; \"Main thread finished.\" &lt;&lt; std::endl;\n}\n\/* \u5907\u6ce8\uff1astd::async \u4e3a\u6211\u4eec\u7ba1\u7406\u4e86\u8fd9\u4e00\u5207\u3002\n\u6211\u4eec\u4e5f\u4e0d\u9700\u8981\u4f7f\u7528\u4e92\u65a5\u9501\u6216\u5176\u4ed6\u540c\u6b65\u673a\u5236\uff0c\u56e0\u4e3a\u6bcf\u4e2a\u5f02\u6b65\u64cd\u4f5c\u90fd\u5728\u5b83\u81ea\u5df1\u7684\u7ebf\u7a0b\u4e0a\u8fd0\u884c\uff0c\n\u4e0d\u4f1a\u4e92\u76f8\u5e72\u6270\uff0c\u5e76\u4e14\u8fd4\u56de\u7684 future \u5bf9\u8c61\u4e3a\u6211\u4eec\u5904\u7406\u4e86\u6240\u6709\u5fc5\u8981\u7684\u540c\u6b65\u3002\nstd::async \u4e0e std::launch::async \u53c2\u6570\u4e00\u8d77\u4f7f\u7528\uff0c\n    \u8fd9\u4f1a\u4fdd\u8bc1\u6bcf\u4e2a\u4efb\u52a1\u90fd\u5728\u4e0d\u540c\u7684\u7ebf\u7a0b\u4e0a\u5f02\u6b65\u8fd0\u884c\u3002\n\u5982\u679c\u4f60\u6ca1\u6709\u6307\u5b9a std::launch::async\uff0cC++ \u8fd0\u884c\u65f6\u53ef\u4ee5\u51b3\u5b9a\u540c\u6b65\uff08\u5ef6\u8fdf\uff09\u6267\u884c\u4efb\u52a1\uff0c\n\u8fd9\u5e76\u4e0d\u662f\u6211\u4eec\u5e0c\u671b\u770b\u5230\u7684\u3002\n    future.get() \u8c03\u7528\u5c06\u963b\u585e\u4e3b\u7ebf\u7a0b\uff0c\u76f4\u5230\u76f8\u5e94\u7684\u4efb\u52a1\u5b8c\u6210\uff0c\u5e76\u8fd4\u56de\u7ed3\u679c\u3002\n\u8fd9\u4f7f\u5f97\u6211\u4eec\u53ef\u4ee5\u5b89\u5168\u5730\u83b7\u53d6\u7ed3\u679c\uff0c\u800c\u4e0d\u4f1a\u53d1\u751f\u7ade\u4e89\u6761\u4ef6\u6216\u8005\u9700\u8981\u4f7f\u7528\u4e92\u65a5\u9501\u3002*\/<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">4. mutable\u5173\u952e\u5b57<\/h3>\n\n\n\n<p>\u9996\u5148\u56de\u987e\u4e00\u4e0b\u4ec0\u4e48\u662f mutable \u5173\u952e\u5b57\u3002\u9664\u4e86\u5728lambda\u8868\u8fbe\u5f0f\u4e2d\u4f7f\u7528\uff0c\u4e00\u822c\u6211\u4eec\u8fd8\u4f1a\u5728\u7c7b\u6210\u5458\u58f0\u660e\u4e2d\u4f7f\u7528\u3002<\/p>\n\n\n\n<p>\u5f53\u5728\u4e00\u4e2a<strong>\u7c7b\u6210\u5458\u53d8\u91cf<\/strong>\u524d\u4f7f\u7528 mutable \u5173\u952e\u5b57\u65f6\uff0c\u4f60\u53ef\u4ee5\u5728\u8be5\u7c7b\u7684 const \u6210\u5458\u51fd\u6570\u4e2d\u4fee\u6539\u8fd9\u4e2a\u6210\u5458\u53d8\u91cf\u3002\u8fd9\u901a\u5e38\u7528\u4e8e\u90a3\u4e9b\u4e0d\u5f71\u54cd\u5bf9\u8c61\u5916\u90e8\u72b6\u6001\u7684\u6210\u5458\uff0c\u4f8b\u5982\u7f13\u5b58\u3001\u8c03\u8bd5\u4fe1\u606f\u6216\u8005\u53ef\u4ee5\u5ef6\u8fdf\u8ba1\u7b97\u7684\u6570\u636e\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class MyClass {\npublic:\n    mutable int cache; \/\/ \u53ef\u4ee5\u5728const\u6210\u5458\u51fd\u6570\u4e2d\u4fee\u6539\n    int data;\n\n    MyClass() : data(0), cache(0) {}\n\n    void setData(int d) const {\n        \/\/ data = d; \/\/ \u7f16\u8bd1\u9519\u8bef\uff1a\u4e0d\u80fd\u5728const\u51fd\u6570\u4e2d\u4fee\u6539\u975emutable\u6210\u5458\n        cache = d;\n    }\n};<\/code><\/pre>\n\n\n\n<p><strong>\u5728lambda\u8868\u8fbe\u5f0f\u4e2d<\/strong>\uff0cmutable \u5173\u952e\u5b57\u5141\u8bb8\u4f60\u4fee\u6539Lambda\u5185\u6355\u83b7\u7684\u53d8\u91cf\u7684\u526f\u672c\u3002\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0cLambda\u8868\u8fbe\u5f0f\u4e2d\u7684 () \u662f const \u7684\uff0c\u4e00\u822c\u6765\u8bf4\u4f60\u4e0d\u80fd\u4fee\u6539\u901a\u8fc7\u503c\u6355\u83b7\u7684\u53d8\u91cf\u3002\u9664\u975e\u4f7f\u7528 mutable \u3002<\/p>\n\n\n\n<p>\u8fd9\u91cc\u7684<strong>\u5173\u952e\u70b9<\/strong>\u662fmutable\u5141\u8bb8\u4fee\u6539\u7684\u662f\u95ed\u5305\u81ea\u5df1\u7684\u6210\u5458\u53d8\u91cf\u7684<strong>\u526f\u672c<\/strong>\uff0c\u800c\u4e0d\u662f\u5916\u90e8\u4f5c\u7528\u57df\u7684\u539f\u59cb\u53d8\u91cf\u3002\u8fd9\u610f\u5473\u7740\u95ed\u5305\u5bf9\u5916\u90e8\u4f5c\u7528\u57df\u7684 <strong>\u201c\u5c01\u95ed\u6027\u201d\u4ecd\u7136\u5f97\u4ee5\u4fdd\u6301<\/strong>\uff0c\u56e0\u4e3a\u5b83\u5e76\u6ca1\u6709\u6539\u53d8\u5916\u90e8\u4f5c\u7528\u57df\u7684\u72b6\u6001\uff0c\u53ea\u662f\u6539\u53d8\u4e86\u81ea\u5df1\u5185\u90e8\u7684\u72b6\u6001\u3002<\/p>\n\n\n\n<p>\u4e0d\u5408\u6cd5\u7684\u4f8b\u5b50\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int x = 0;\nauto f = &#91;x]() {  x++; \/\/ \u9519\u8bef\uff1a\u4e0d\u80fd\u4fee\u6539\u6355\u83b7\u7684\u53d8\u91cf  };\nf();<\/code><\/pre>\n\n\n\n<p>\u5e94\u8be5\u8fd9\u6837\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int x = 0;\nauto f = &#91;x]() mutable { x++; std::cout &lt;&lt; x &lt;&lt; std::endl; };\nf(); \/\/ \u6b63\u786e\uff1a\u8f93\u51fa1<\/code><\/pre>\n\n\n\n<p>\u5b9e\u9645\u4f8b\u5b50\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u6355\u83b7\u53d8\u91cf\u4fee\u6539<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;iostream&gt;\n#include &lt;vector&gt;\n\nint main() {\n    int count = 0;\n\n    \/\/ \u521b\u5efa\u4e00\u4e2a\u53ef\u53d8lambda\u8868\u8fbe\u5f0f\uff0c\u6bcf\u6b21\u8c03\u7528\u90fd\u9012\u589ecount\n    auto increment = &#91;count]() mutable {\n        count++;\n        std::cout &lt;&lt; count &lt;&lt; std::endl;\n    };\n\n    increment(); \/\/ \u8f93\u51fa 1\n    increment(); \/\/ \u8f93\u51fa 2\n    increment(); \/\/ \u8f93\u51fa 3\n\n    \/\/ \u5916\u90e8\u7684count\u4ecd\u7136\u662f0\uff0c\u56e0\u4e3a\u5b83\u662f\u901a\u8fc7\u503c\u6355\u83b7\u7684\n    std::cout &lt;&lt; \"External count: \" &lt;&lt; count &lt;&lt; std::endl; \/\/ \u8f93\u51fa External count: 0\n}<\/code><\/pre>\n\n\n\n<ol class=\"wp-block-list\" start=\"2\">\n<li>\u751f\u6210\u552f\u4e00\u7684ID<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;iostream&gt;\n\nint main() {\n    int lastId = 0;\n\n    auto generateId = &#91;lastId]() mutable -&gt; int {\n        return ++lastId; \/\/ \u9012\u589e\u5e76\u8fd4\u56de\u65b0\u7684ID\n    };\n\n    std::cout &lt;&lt; \"New ID: \" &lt;&lt; generateId() &lt;&lt; std::endl; \/\/ \u8f93\u51fa New ID: 1\n    std::cout &lt;&lt; \"New ID: \" &lt;&lt; generateId() &lt;&lt; std::endl; \/\/ \u8f93\u51fa New ID: 2\n    std::cout &lt;&lt; \"New ID: \" &lt;&lt; generateId() &lt;&lt; std::endl; \/\/ \u8f93\u51fa New ID: 3\n}<\/code><\/pre>\n\n\n\n<ol class=\"wp-block-list\" start=\"3\">\n<li>\u72b6\u6001\u4fdd\u6301<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;iostream&gt;\n#include &lt;algorithm&gt;\n#include &lt;vector&gt;\n\nint main() {\n    std::vector&lt;int&gt; numbers = {1, 2, 3, 4, 5};\n\n    \/\/ \u521d\u59cb\u72b6\u6001\n    int accumulator = 0;\n\n    \/\/ \u521b\u5efa\u4e00\u4e2a\u53ef\u53d8lambda\u8868\u8fbe\u5f0f\u6765\u7d2f\u52a0\u503c\n    auto sum = &#91;accumulator](int value) mutable {\n        accumulator += value;\n        return accumulator; \/\/ \u8fd4\u56de\u5f53\u524d\u7d2f\u52a0\u503c\n    };\n\n    std::vector&lt;int&gt; runningTotals(numbers.size());\n\n    \/\/ \u5bf9\u6bcf\u4e2a\u5143\u7d20\u5e94\u7528sum\uff0c\u751f\u6210\u8fd0\u884c\u603b\u548c\n    std::transform(numbers.begin(), numbers.end(), runningTotals.begin(), sum);\n\n    \/\/ \u8f93\u51fa\u8fd0\u884c\u603b\u548c\n    for (int total : runningTotals) {\n        std::cout &lt;&lt; total &lt;&lt; \" \"; \/\/ \u8f93\u51fa 1 3 6 10 15\n    }\n    std::cout &lt;&lt; std::endl;\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">5. Lambda\u8fd4\u56de\u503c\u63a8\u5bfc<\/h3>\n\n\n\n<p>\u5728C++11\u4e2d\u5f15\u5165\u4e86Lambda\u8868\u8fbe\u5f0f\u65f6\uff0cLambda\u7684\u8fd4\u56de\u7c7b\u578b\u901a\u5e38\u9700\u8981\u660e\u786e\u6307\u5b9a\u3002<\/p>\n\n\n\n<p>\u4eceC++14\u5f00\u59cb\uff0c\u5bf9Lambda\u8fd4\u56de\u503c\u7684\u63a8\u5bfc\u8fdb\u884c\u4e86\u6539\u8fdb\uff0c\u5f15\u5165\u4e86\u81ea\u52a8\u7c7b\u578b\u63a8\u5bfc\u3002<\/p>\n\n\n\n<p>C++14\u4e2dLambda\u8fd4\u56de\u503c\u7684\u63a8\u5bfc\u9075\u5faa\u4ee5\u4e0b\u89c4\u5219\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5982\u679cLambda\u7684\u51fd\u6570\u4f53\u4e2d\u5305\u542b\u4e86 return \u5173\u952e\u5b57\uff0c\u4e14\u6240\u6709 return \u8bed\u53e5\u540e\u9762\u7684\u8868\u8fbe\u5f0f\u7684\u7c7b\u578b\u90fd\u76f8\u540c\uff0c\u90a3\u4e48Lambda\u7684\u8fd4\u56de\u7c7b\u578b\u88ab\u63a8\u5bfc\u4e3a\u8be5\u7c7b\u578b\u3002<\/li>\n\n\n\n<li>\u5982\u679cLambda\u7684\u51fd\u6570\u4f53\u662f\u4e00\u4e2a\u5355\u4e00\u7684\u8fd4\u56de\u8bed\u53e5\uff0c\u6216\u8005\u53ef\u4ee5\u89c6\u4e3a\u4e00\u4e2a\u5355\u4e00\u7684\u8fd4\u56de\u8bed\u53e5\uff08\u6bd4\u5982\u4e00\u4e2a\u6784\u9020\u51fd\u6570\u6216\u8005\u82b1\u62ec\u53f7\u521d\u59cb\u5316\u5668\uff09\uff0c\u5219\u8fd4\u56de\u7c7b\u578b\u88ab\u63a8\u5bfc\u4e3a\u8be5\u8fd4\u56de\u8bed\u53e5\u8868\u8fbe\u5f0f\u7684\u7c7b\u578b\u3002<\/li>\n\n\n\n<li>\u5982\u679cLambda\u4e0d\u8fd4\u56de\u4efb\u4f55\u503c\uff08\u5373\u51fd\u6570\u4f53\u4e2d\u6ca1\u6709 return \u8bed\u53e5\uff09\uff0c\u6216\u8005\u51fd\u6570\u4f53\u53ea\u5305\u542b\u4e0d\u8fd4\u56de\u503c\u7684 return \u8bed\u53e5\uff08\u5373 return;\uff09\uff0c\u5219\u63a8\u5bfc\u7684\u8fd4\u56de\u7c7b\u578b\u4e3a void\u3002<\/li>\n\n\n\n<li><strong>C++11\u7684\u8fd4\u56de\u503c\u63a8\u5bfc\u4f8b\u5b50<\/strong><\/li>\n<\/ol>\n\n\n\n<p>\u5728C++11\u4e2d\uff0c\u5982\u679cLambda\u4f53\u5305\u542b\u591a\u4e2a\u8fd4\u56de\u8bed\u53e5\uff0c\u5fc5\u987b\u663e\u5f0f\u6307\u5b9a\u8fd4\u56de\u7c7b\u578b\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>auto f = &#91;](int x) -&gt; double { \/\/ \u663e\u5f0f\u6307\u5b9a\u8fd4\u56de\u7c7b\u578b\n    if (x &gt; 0)\n        return x * 2.5;\n    else\n        return x \/ 2.0;\n};<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>C++14\u81ea\u52a8\u63a8\u5bfc<\/strong><\/li>\n<\/ul>\n\n\n\n<p>\u5728C++14\u4e2d\uff0c\u4e0a\u8ff0Lambda\u8868\u8fbe\u5f0f\u7684\u8fd4\u56de\u7c7b\u578b\u53ef\u4ee5\u88ab\u81ea\u52a8\u63a8\u5bfc\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>auto f = &#91;](int x) { \/\/ \u8fd4\u56de\u7c7b\u578b\u81ea\u52a8\u63a8\u5bfc\u4e3adouble\n    if (x &gt; 0)\n        return x * 2.5; \/\/ double\n    else\n        return x \/ 2.0; \/\/ double\n};<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u9519\u8bef\u793a\u8303<\/strong><\/li>\n<\/ul>\n\n\n\n<p>\u5982\u679c\u8fd4\u56de\u8bed\u53e5\u7684\u7c7b\u578b\u4e0d\u5339\u914d\uff0c\u4e0d\u80fd\u8fdb\u884c\u81ea\u52a8\u63a8\u5bfc\uff0c\u8fd9\u4f1a\u5bfc\u81f4\u7f16\u8bd1\u9519\u8bef\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>auto g = &#91;](int x) { \/\/ \u7f16\u8bd1\u9519\u8bef\uff0c\u56e0\u4e3a\u8fd4\u56de\u7c7b\u578b\u4e0d\u4e00\u81f4\n    if (x &gt; 0)\n        return x * 2.5; \/\/ double\n    else\n        return x;       \/\/ int\n};<\/code><\/pre>\n\n\n\n<p>\u4f46\u662f\u5728C++17\u4e4b\u540e\uff0c\u5982\u679c\u8fd4\u56de\u7684\u7c7b\u578b\u975e\u5e38\u4e0d\u540c\uff0c\u4ee5\u81f3\u4e8e\u65e0\u6cd5\u76f4\u63a5\u6216\u901a\u8fc7\u8f6c\u6362\u7edf\u4e00\u4e3a\u4e00\u4e2a\u5171\u540c\u7684\u7c7b\u578b\uff0c\u53ef\u4ee5\u4f7f\u7528 std::variant \u6216 std::any \uff0c\u8fd9\u6837\u53ef\u4ee5\u5305\u542b\u591a\u79cd\u4e0d\u540c\u7684\u7c7b\u578b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;variant&gt;\n\nauto g = &#91;](int x) -&gt; std::variant&lt;int, double&gt; {\n    if (x &gt; 0)\n        return x * 2.5; \/\/ \u8fd4\u56dedouble\u7c7b\u578b\n    else\n        return x;       \/\/ \u8fd4\u56deint\u7c7b\u578b\n};<\/code><\/pre>\n\n\n\n<p>Lambda\u8868\u8fbe\u5f0f\u8fd4\u56de\u4e00\u4e2a std::variant \u7c7b\u578b\uff0c\u4e5f\u5c31\u662f\u8fd4\u56de\u4e00\u4e2a int \u6216 double \u7c7b\u578b\u7684\u53e0\u52a0\u6001\uff0c\u540e\u7eed\u8c03\u7528\u8005\u7136\u540e\u53ef\u4ee5\u68c0\u67e5\u8fd9\u4e2a\u53d8\u91cf\uff0c\u5e76\u76f8\u5e94\u5730\u5904\u7406\u3002\u8fd9\u90e8\u5206\u7684\u5185\u5bb9\u4e0d\u505a\u8fc7\u591a\u8ba8\u8bba\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">6. \u5d4c\u5957Lambda<\/h3>\n\n\n\n<p>\u4e5f\u53ef\u4ee5\u53eb\u505a\u5957\u5a03lambda\uff0c\u5728\u4e00\u4e2alambda\u5185\u518d\u5199\u4e00\u4e2alambda\uff0c\u662f\u4e00\u79cd\u9ad8\u7ea7\u7684\u51fd\u6570\u5f0f\u7f16\u7a0b\u6280\u5de7\u3002<\/p>\n\n\n\n<p>\u7b80\u5355\u4e3e\u4e00\u4e2a\u4f8b\u5b50\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;iostream&gt;\n#include &lt;vector&gt;\n#include &lt;algorithm&gt;\n\nint main() {\n    std::vector&lt;int&gt; numbers = {1, 2, 3, 4, 5};\n\n    \/\/ \u5916\u5c42Lambda\u7528\u4e8e\u904d\u5386\u96c6\u5408\n    std::for_each(numbers.begin(), numbers.end(), &#91;](int x) {\n        \/\/ \u5d4c\u5957Lambda\u7528\u4e8e\u8ba1\u7b97\u5e73\u65b9\n        auto square = &#91;](int y) { return y * y; };\n\n        \/\/ \u8c03\u7528\u5d4c\u5957Lambda\u5e76\u6253\u5370\u7ed3\u679c\n        std::cout &lt;&lt; square(x) &lt;&lt; ' ';\n    });\n\n    std::cout &lt;&lt; std::endl;\n    return 0;\n}<\/code><\/pre>\n\n\n\n<p>\u4f46\u662f\u6211\u4eec\u9700\u8981\u6ce8\u610f\u5f88\u591a\u95ee\u9898\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u4e0d\u8981\u5199\u5f97\u592a\u590d\u6742\u4e86\uff0c\u53ef\u8bfb\u6027\u9700\u8981\u91cd\u70b9\u8003\u8651\u3002<\/li>\n\n\n\n<li>\u6ce8\u610f\u6355\u83b7\u5217\u8868\u7684\u53d8\u91cf\u7684\u751f\u547d\u5468\u671f\uff0c\u4e0b\u9762\u7684\u4f8b\u5b50\u4e5f\u4f1a\u8be6\u7ec6\u8ba8\u8bba\u3002<\/li>\n\n\n\n<li>\u6355\u83b7\u5217\u8868\u5e94\u8be5\u5c3d\u53ef\u80fd\u7684\u7b80\u5355\uff0c\u907f\u514d\u9519\u8bef\u3002<\/li>\n\n\n\n<li>\u7f16\u8bd1\u5668\u5bf9\u5d4c\u5957Lambda\u7684\u4f18\u5316\u53ef\u80fd\u4e0d\u5982\u9876\u5c42\u51fd\u6570\u6216\u7c7b\u6210\u5458\u51fd\u6570\u3002<\/li>\n<\/ol>\n\n\n\n<p>\u5d4c\u5957Lambda\u5982\u679c\u6355\u83b7\u5916\u5c42Lambda\u7684\u5c40\u90e8\u53d8\u91cf\uff0c\u9700\u8981\u6ce8\u610f\u53d8\u91cf\u7684\u751f\u547d\u5468\u671f\u3002\u5982\u679c\u5d4c\u5957Lambda\u7684\u6267\u884c\u5ef6\u7eed\u5230\u5916\u5c42Lambda\u7684\u751f\u547d\u5468\u671f\u4e4b\u5916\uff0c\u90a3\u4e48\u6355\u83b7\u7684\u5c40\u90e8\u53d8\u91cf\u5c06\u4e0d\u518d\u6709\u6548\uff0c\u5c31\u4f1a\u62a5\u9519\u4e86\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;iostream&gt;\n#include &lt;functional&gt;\n\nstd::function&lt;int()&gt; createLambda() {\n    int localValue = 10; \/\/ \u5916\u5c42Lambda\u7684\u5c40\u90e8\u53d8\u91cf\n\n    \/\/ \u8fd4\u56de\u4e00\u4e2a\u6355\u83b7localValue\u7684Lambda\n    return &#91;localValue]() mutable {\n        return ++localValue; \/\/ \u8bd5\u56fe\u4fee\u6539\u6355\u83b7\u7684\u53d8\u91cf\uff08\u7531\u4e8e\u662f\u503c\u6355\u83b7\uff0c\u8fd9\u662f\u5408\u6cd5\u7684\uff09\n    };\n}\n\nint main() {\n    auto myLambda = createLambda(); \/\/ myLambda\u73b0\u5728\u6301\u6709\u4e00\u4e2a\u6355\u83b7\u4e86\u5df2\u7ecf\u9500\u6bc1\u7684\u5c40\u90e8\u53d8\u91cf\u7684\u526f\u672c\n\n    std::cout &lt;&lt; myLambda() &lt;&lt; std::endl; \/\/ \u8fd9\u5c06\u8f93\u51fa11\uff0c\u4f46\u662f\u4f9d\u8d56\u4e8e\u5df2\u7ecf\u9500\u6bc1\u7684localValue\u7684\u526f\u672c\n    std::cout &lt;&lt; myLambda() &lt;&lt; std::endl; \/\/ \u518d\u6b21\u8c03\u7528\u5c06\u8f93\u51fa12\uff0c\u7ee7\u7eed\u4f9d\u8d56\u4e8e\u90a3\u4e2a\u526f\u672c\n\n    return 0;\n}<\/code><\/pre>\n\n\n\n<p>\u89e3\u91ca\u4e00\u4e0b\uff0c\u7531\u4e8eLambda\u662f\u4ee5\u503c\u6355\u83b7\u7684\u65b9\u5f0f\u6355\u83b7 localValue \u7684\uff0c\u6240\u4ee5\u5b83\u6301\u6709 localValue \u7684\u4e00\u4e2a\u526f\u672c\uff0c\u8be5\u526f\u672c\u7684\u751f\u547d\u5468\u671f\u4e0e\u8fd4\u56de\u7684Lambda\u5bf9\u8c61\u76f8\u540c\u3002<\/p>\n\n\n\n<p>\u5f53\u6211\u4eec\u5728 main \u51fd\u6570\u4e2d\u8c03\u7528 myLambda() \u65f6\uff0c\u5b83\u64cd\u4f5c\u7684\u662f localValue \u526f\u672c\u7684\u72b6\u6001\uff0c\u800c\u975e\u539f\u59cb\u7684 localValue \uff08\u5df2\u7ecf\u5728 createLambda \u51fd\u6570\u6267\u884c\u5b8c\u6bd5\u540e\u9500\u6bc1\uff09\u3002\u8fd9\u91cc\u867d\u7136\u6ca1\u6709\u5f15\u53d1\u672a\u5b9a\u4e49\u884c\u4e3a\uff0c\u4f46\u662f\u5982\u679c\u6211\u4eec\u4f7f\u7528\u5f15\u7528\u6355\u83b7\uff0c\u60c5\u51b5\u5c31\u4e0d\u4e00\u6837\u4e86\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>std::function&lt;int()&gt; createLambda() {\n    int localValue = 10; \/\/ \u5916\u5c42Lambda\u7684\u5c40\u90e8\u53d8\u91cf\n\n    \/\/ \u8fd4\u56de\u4e00\u4e2a\u6355\u83b7localValue\u5f15\u7528\u7684Lambda\n    return &#91;&amp;localValue]() mutable {\n        return ++localValue; \/\/ \u8bd5\u56fe\u4fee\u6539\u6355\u83b7\u7684\u53d8\u91cf\n    };\n}\n\/\/ \u6b64\u65f6\u4f7f\u7528createLambda\u8fd4\u56de\u7684Lambda\u5c06\u4f1a\u5bfc\u81f4\u672a\u5b9a\u4e49\u884c\u4e3a<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">7. Lambda\u3001std:function\u4e0e\u59d4\u6258<\/h3>\n\n\n\n<p>Lambda\u8868\u8fbe\u5f0f\u3001std::function\u548c\u59d4\u6258\u662fC++\u4e2d\u7528\u4e8e\u5b9e\u73b0\u51fd\u6570\u8c03\u7528\u548c\u56de\u8c03\u673a\u5236\u7684\u4e09\u4e2a\u4e0d\u540c\u7684\u6982\u5ff5\u3002\u63a5\u4e0b\u6765\u6211\u4eec\u5206\u522b\u8bb2\u89e3\u4e09\u8005\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Lambda<\/strong><\/li>\n<\/ul>\n\n\n\n<p>C++11\u5f15\u5165\u7684\u4e00\u79cd\u5b9a\u4e49\u533f\u540d\u51fd\u6570\u5bf9\u8c61\u7684\u8bed\u6cd5\u3002Lambda\u88ab\u7528\u4e8e\u521b\u5efa\u4e00\u4e2a\u53ef\u8c03\u7528\u7684\u5b9e\u4f53\uff0c\u5373Lambda\u95ed\u5305\uff0c\u901a\u5e38\u7528\u4e8e\u4f20\u9012\u7ed9\u7b97\u6cd5\u6216\u7528\u4f5c\u56de\u8c03\u51fd\u6570\u3002Lambda\u8868\u8fbe\u5f0f\u53ef\u4ee5\u6355\u83b7\u4f5c\u7528\u57df\u5185\u7684\u53d8\u91cf\uff0c\u53ef\u4ee5\u6309\u503c\u6355\u83b7\uff08\u62f7\u8d1d\uff09\uff0c\u4e5f\u53ef\u4ee5\u6309\u5f15\u7528\u6355\u83b7\u3002Lambda\u8868\u8fbe\u5f0f\u662f\u5b9a\u4e49\u5728\u51fd\u6570\u5185\u90e8\u7684\uff0c\u5b83\u4eec\u7684\u7c7b\u578b\u662f\u552f\u4e00\u7684\uff0c\u5e76\u4e14\u4e0d\u53ef\u663e\u5f0f\u6307\u5b9a\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>auto lambda = &#91;](int a, int b) { return a + b; };\nauto result = lambda(2, 3); \/\/ \u8c03\u7528Lambda\u8868\u8fbe\u5f0f<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>std::function<\/li>\n<\/ul>\n\n\n\n<p>std::function \u662fC++11\u5f15\u5165\u7684\u7c7b\u578b\u64e6\u9664\u5305\u88c5\u5668\uff0c\u5b83\u53ef\u4ee5<strong>\u5b58\u50a8<\/strong>\u3001<strong>\u8c03\u7528<\/strong>\u548c<strong>\u590d\u5236<\/strong>\u4efb\u4f55\u53ef\u8c03\u7528\u5b9e\u4f53\uff0c\u5982\u51fd\u6570\u6307\u9488\u3001\u6210\u5458\u51fd\u6570\u6307\u9488\u3001Lambda\u8868\u8fbe\u5f0f\u548c\u51fd\u6570\u5bf9\u8c61\u3002\u4ee3\u4ef7\u5c31\u662f\u5f00\u9500\u8f83\u5927\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>std::function&lt;int(int, int)&gt; func = lambda;\nauto result = func(2, 3); \/\/ \u4f7f\u7528std::function\u5bf9\u8c61\u8c03\u7528Lambda\u8868\u8fbe\u5f0f<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u59d4\u6258<\/strong><\/li>\n<\/ul>\n\n\n\n<p>\u59d4\u6258\u5728C++\u4e2d\u4e0d\u662f\u4e00\u4e2a\u6b63\u5f0f\u7684\u672f\u8bed\u3002\u59d4\u6258\u901a\u5e38\u662f\u4e00\u79cd\u5c06\u51fd\u6570\u8c03\u7528\u59d4\u6258\u7ed9\u5176\u4ed6\u5bf9\u8c61\u7684\u673a\u5236\u3002\u5728C#\u4e2d\uff0c\u59d4\u6258\u662f\u4e00\u79cd\u7c7b\u578b\u5b89\u5168\u7684\u51fd\u6570\u6307\u9488\u3002\u5728C++\u4e2d\uff0c\u59d4\u6258\u7684\u5b9e\u73b0\u4e00\u822c\u6709\u51e0\u79cd\u65b9\u5f0f\uff1a\u51fd\u6570\u6307\u9488\u3001\u6210\u5458\u51fd\u6570\u6307\u9488\u3001 std::function \u548c\u51fd\u6570\u5bf9\u8c61\u3002\u4e0b\u9762\u662f\u4e00\u4e2a\u59d4\u6258\u6784\u9020\u51fd\u6570\u7684\u4f8b\u5b50\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class MyClass {\npublic:\n    MyClass(int value) : MyClass(value, \"default\") { \/\/ \u59d4\u6258\u7ed9\u53e6\u4e00\u4e2a\u6784\u9020\u51fd\u6570\n        std::cout &lt;&lt; \"Constructor with single parameter called.\" &lt;&lt; std::endl;\n    }\n\n    MyClass(int value, std::string text) {\n        std::cout &lt;&lt; \"Constructor with two parameters called: \" &lt;&lt; value &lt;&lt; \", \" &lt;&lt; text &lt;&lt; std::endl;\n    }\n};\n\nint main() {\n    MyClass obj(30); \/\/ \u8fd9\u5c06\u8c03\u7528\u4e24\u4e2a\u6784\u9020\u51fd\u6570\n}<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u4e09\u8005\u5bf9\u6bd4<\/strong><\/li>\n<\/ul>\n\n\n\n<p><strong>Lambda\u8868\u8fbe\u5f0f<\/strong>\u662f\u8f7b\u91cf\u7ea7\u7684\uff0c\u5e76\u4e14\u975e\u5e38\u9002\u5408\u7528\u4e8e\u5b9a\u4e49\u7b80\u5355\u7684\u5c40\u90e8\u56de\u8c03\u548c\u4f5c\u4e3a\u7b97\u6cd5\u7684\u53c2\u6570\u3002<\/p>\n\n\n\n<p>std::function \u66f4\u91cd\u91cf\u7ea7\uff0c\u4f46\u7075\u6d3b\u6027\u66f4\u9ad8\u3002\u4f8b\u5982\uff0c\u5982\u679c\u4f60\u6709\u4e00\u4e2a\u9700\u8981\u5b58\u50a8\u4e0d\u540c\u7c7b\u578b\u7684\u56de\u8c03\u51fd\u6570\u7684\u573a\u666f\uff0cstd::function\u662f\u7406\u60f3\u7684\u9009\u62e9\uff0c\u56e0\u4e3a\u5b83\u53ef\u4ee5\u5b58\u50a8\u4efb\u610f\u7c7b\u578b\u7684\u53ef\u8c03\u7528\u5b9e\u4f53\u3002\u4f53\u73b0\u5176\u7075\u6d3b\u6027\u7684\u4f8b\u5b50\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;iostream&gt;\n#include &lt;functional&gt;\n#include &lt;vector&gt;\n\n\/\/ \u4e00\u4e2a\u63a5\u6536int\u5e76\u8fd4\u56devoid\u7684\u51fd\u6570\nvoid printNumber(int number) {\n    std::cout &lt;&lt; \"Number: \" &lt;&lt; number &lt;&lt; std::endl;\n}\n\n\/\/ \u4e00\u4e2aLambda\u8868\u8fbe\u5f0f\nauto printSum = &#91;](int a, int b) {\n    std::cout &lt;&lt; \"Sum: \" &lt;&lt; (a + b) &lt;&lt; std::endl;\n};\n\n\/\/ \u4e00\u4e2a\u51fd\u6570\u5bf9\u8c61\nclass PrintMessage {\npublic:\n    void operator()(const std::string &amp;message) const {\n        std::cout &lt;&lt; \"Message: \" &lt;&lt; message &lt;&lt; std::endl;\n    }\n};\n\nint main() {\n    \/\/ \u521b\u5efa\u4e00\u4e2astd::function\u7684\u5411\u91cf\uff0c\u53ef\u4ee5\u5b58\u50a8\u4efb\u4f55\u7c7b\u578b\u7684\u53ef\u8c03\u7528\u5bf9\u8c61\n    std::vector&lt;std::function&lt;void()&gt;&gt; callbacks;\n\n    \/\/ \u6dfb\u52a0\u4e00\u4e2a\u666e\u901a\u51fd\u6570\u7684\u56de\u8c03\n    int number_to_print = 42;\n    callbacks.push_back(&#91;=]{ printNumber(number_to_print); });\n\n    \/\/ \u6dfb\u52a0\u4e00\u4e2aLambda\u8868\u8fbe\u5f0f\u7684\u56de\u8c03\n    int a = 10, b = 20;\n    callbacks.push_back(&#91;=]{ printSum(a, b); });\n\n    \/\/ \u6dfb\u52a0\u4e00\u4e2a\u51fd\u6570\u5bf9\u8c61\u7684\u56de\u8c03\n    std::string message = \"Hello World\";\n    PrintMessage printMessage;\n    callbacks.push_back(&#91;=]{ printMessage(message); });\n\n    \/\/ \u6267\u884c\u6240\u6709\u7684\u56de\u8c03\n    for (auto&amp; callback : callbacks) {\n        callback();\n    }\n\n    return 0;\n}<\/code><\/pre>\n\n\n\n<p><strong>\u59d4\u6258<\/strong>\u901a\u5e38\u4e0e\u4e8b\u4ef6\u5904\u7406\u76f8\u5173\uff0c\u5728C++\u4e2d\u6ca1\u6709\u5185\u7f6e\u7684\u4e8b\u4ef6\u5904\u7406\u673a\u5236\uff0c\u56e0\u6b64std::function\u548cLambda\u8868\u8fbe\u5f0f\u7ecf\u5e38\u7528\u6765\u5b9e\u73b0\u59d4\u6258\u6a21\u5f0f\u3002\u5177\u4f53\u6765\u8bb2\u5c31\u662f\uff0c\u4f60\u5b9a\u4e49\u4e00\u4e2a\u56de\u8c03\u63a5\u53e3\uff0c\u7528\u6237\u53ef\u4ee5\u5411\u8fd9\u4e2a\u63a5\u53e3\u6ce8\u518c\u81ea\u5df1\u7684\u51fd\u6570\u6216Lambda\u8868\u8fbe\u5f0f\uff0c\u4ee5\u4fbf\u5728\u4e8b\u4ef6\u53d1\u751f\u65f6\u8c03\u7528\u3002\u4e00\u822c\u6b65\u9aa4\u5982\u4e0b\uff08\u987a\u4fbf\u4e3e\u4e2a\u4f8b\u5b50\uff09\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5b9a\u4e49\u53ef\u4ee5\u88ab\u8c03\u7528\u7684\u7c7b\u578b<\/strong>\uff1a\u4f60\u9700\u8981\u786e\u5b9a\u4f60\u7684\u56de\u8c03\u51fd\u6570\u6216Lambda\u8868\u8fbe\u5f0f\u9700\u8981\u63a5\u53d7\u4ec0\u4e48\u53c2\u6570\uff0c\u8fd4\u56de\u4ec0\u4e48\u7c7b\u578b\u7684\u7ed3\u679c\u3002<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>using Callback = std::function&lt;void()&gt;; \/\/ \u6ca1\u6709\u53c2\u6570\u548c\u8fd4\u56de\u503c\u7684\u56de\u8c03<\/code><\/pre>\n\n\n\n<ol class=\"wp-block-list\" start=\"2\">\n<li><strong>\u521b\u5efa\u4e00\u4e2a\u7c7b\u6765\u7ba1\u7406\u56de\u8c03<\/strong>\uff1a\u8fd9\u4e2a\u7c7b\u4f1a\u6301\u6709\u6240\u6709\u56de\u8c03\u51fd\u6570\uff0c\u5e76\u5141\u8bb8\u7528\u6237\u6dfb\u52a0\u6216\u8005\u79fb\u9664\u56de\u8c03\u3002<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>class Button {\nprivate:\n    std::vector&lt;Callback&gt; onClickCallbacks; \/\/ \u5b58\u50a8\u56de\u8c03\u7684\u5bb9\u5668\n\npublic:\n    void addClickListener(const Callback&amp; callback) {\n        onClickCallbacks.push_back(callback);\n    }\n\n    void click() {\n        for (auto&amp; callback : onClickCallbacks) {\n            callback(); \/\/ \u6267\u884c\u6bcf\u4e00\u4e2a\u56de\u8c03\n        }\n    }\n};<\/code><\/pre>\n\n\n\n<ol class=\"wp-block-list\" start=\"3\">\n<li><strong>\u63d0\u4f9b\u4e00\u4e2a\u65b9\u6cd5\u6765\u6dfb\u52a0\u56de\u8c03<\/strong>\uff1a\u8fd9\u4e2a\u65b9\u6cd5\u5141\u8bb8\u7528\u6237\u5c06\u4ed6\u4eec\u81ea\u5df1\u7684\u51fd\u6570\u6216Lambda\u8868\u8fbe\u5f0f<strong>\u6ce8\u518c\u4e3a\u56de\u8c03<\/strong>\u3002<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>Button button;\nbutton.addClickListener(&#91;]() {\n    std::cout &lt;&lt; \"Button was clicked!\" &lt;&lt; std::endl;\n});<\/code><\/pre>\n\n\n\n<ol class=\"wp-block-list\" start=\"4\">\n<li><strong>\u63d0\u4f9b\u4e00\u4e2a\u65b9\u6cd5\u6765\u6267\u884c\u56de\u8c03<\/strong>\uff1a\u5f53\u9700\u8981\u7684\u65f6\u5019\uff0c\u8fd9\u4e2a\u65b9\u6cd5\u4f1a<strong>\u8c03\u7528\u6240\u6709\u5df2\u7ecf\u6ce8\u518c\u7684\u56de\u8c03\u51fd\u6570<\/strong>\u3002<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>button.click(); \/\/ \u7528\u6237\u70b9\u51fb\u6309\u94ae\uff0c\u89e6\u53d1\u6240\u6709\u7684\u56de\u8c03<\/code><\/pre>\n\n\n\n<p>\u662f\u4e0d\u662f\u975e\u5e38\u7b80\u5355\u5462\uff0c\u63a5\u4e0b\u6765\u518d\u6765\u4e00\u4e2a\u4f8b\u5b50\uff0c\u52a0\u6df1\u4e00\u4e0b\u7406\u89e3\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;functional&gt;\n#include &lt;iostream&gt;\n#include &lt;vector&gt;\n\nclass Delegate {\npublic:\n    using Callback = std::function&lt;void(int)&gt;;  \/\/ \u5b9a\u4e49\u56de\u8c03\u7c7b\u578b\uff0c\u8fd9\u91cc\u7684\u56de\u8c03\u63a5\u6536\u4e00\u4e2aint\u53c2\u6570\n\n    \/\/ \u6ce8\u518c\u56de\u8c03\u51fd\u6570\n    void registerCallback(const Callback&amp; callback) {\n        callbacks.push_back(callback);\n    }\n\n    \/\/ \u89e6\u53d1\u6240\u6709\u56de\u8c03\u51fd\u6570\n    void notify(int value) {\n        for (const auto&amp; callback : callbacks) {\n            callback(value);  \/\/ \u6267\u884c\u56de\u8c03\n        }\n    }\n\nprivate:\n    std::vector&lt;Callback&gt; callbacks;  \/\/ \u5b58\u50a8\u56de\u8c03\u7684\u5bb9\u5668\n};\n\nint main() {\n    Delegate del;\n\n    \/\/ \u7528\u6237\u6ce8\u518c\u81ea\u5df1\u7684\u51fd\u6570\n    del.registerCallback(&#91;](int n) {\n        std::cout &lt;&lt; \"Lambda 1: \" &lt;&lt; n &lt;&lt; std::endl;\n    });\n\n    \/\/ \u53e6\u4e00\u4e2aLambda\u8868\u8fbe\u5f0f\n    del.registerCallback(&#91;](int n) {\n        std::cout &lt;&lt; \"Lambda 2: \" &lt;&lt; n * n &lt;&lt; std::endl;\n    });\n\n    \/\/ \u89e6\u53d1\u56de\u8c03\n    del.notify(10);  \/\/ \u8fd9\u5c06\u8c03\u7528\u6240\u6709\u6ce8\u518c\u7684Lambda\u8868\u8fbe\u5f0f\n\n    return 0;\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">8. Lambda\u5728\u5f02\u6b65\u548c\u5e76\u53d1\u7f16\u7a0b\u4e2d<\/h3>\n\n\n\n<p>\u5168\u56e0\u4e3aLambda\u6709\u4e2a\u6355\u83b7\u548c\u5b58\u50a8\u72b6\u6001\u7684\u529f\u80fd\uff0c\u5bfc\u81f4\u6211\u4eec\u5728\u7f16\u5199\u73b0\u4ee3C++\u5e76\u53d1\u7f16\u7a0b\u7684\u65f6\u5019\u975e\u5e38\u6709\u7528\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Lambda\u548c\u7ebf\u7a0b<\/strong><\/li>\n<\/ul>\n\n\n\n<p>\u76f4\u63a5\u5728 std::thread \u6784\u9020\u51fd\u6570\u4e2d\u4f7f\u7528 Lambda \u8868\u8fbe\u5f0f\u6765\u5b9a\u4e49\u7ebf\u7a0b\u5e94\u8be5\u6267\u884c\u7684\u4ee3\u7801\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;thread&gt;\n#include &lt;iostream&gt;\n\nint main() {\n    int value = 42;\n\n    \/\/ \u521b\u5efa\u4e00\u4e2a\u65b0\u7ebf\u7a0b\uff0c\u4f7f\u7528 Lambda \u8868\u8fbe\u5f0f\u4f5c\u4e3a\u7ebf\u7a0b\u51fd\u6570\n    std::thread worker(&#91;value]() {\n        std::cout &lt;&lt; \"Value in thread: \" &lt;&lt; value &lt;&lt; std::endl;\n    });\n\n    \/\/ \u4e3b\u7ebf\u7a0b\u7ee7\u7eed\u6267\u884c...\n\n    \/\/ \u7b49\u5f85\u5de5\u4f5c\u7ebf\u7a0b\u5b8c\u6210\n    worker.join();\n\n    return 0;\n}<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Lambda \u4e0e<\/strong> <strong>std::async<\/strong><\/li>\n<\/ul>\n\n\n\n<p>std::async \u662f\u4e00\u4e2a\u8f7b\u677e\u521b\u5efa\u5f02\u6b65\u7684\u4e1c\u897f\uff0c\u8ba1\u7b97\u5b8c\u540e\u8fd4\u56de\u4e00\u4e2a std::future \u5bf9\u8c61\uff0c\u53ef\u4ee5\u8c03\u7528 get \u4f46\u82e5\u672a\u6267\u884c\u5b8c\u4f1a\u963b\u585e\u3002\u5173\u4e8e\u8fd9\u4e2aasync\u8fd8\u6709\u5f88\u591a\u6709\u8da3\u7684\u5185\u5bb9\uff0c\u8fd9\u91cc\u5c31\u4e0d\u8d58\u8ff0\u4e86\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;future&gt;\n#include &lt;iostream&gt;\n\nint main() {\n    \/\/ \u542f\u52a8\u4e00\u4e2a\u5f02\u6b65\u4efb\u52a1\n    auto future = std::async(&#91;]() {\n        \/\/ \u6267\u884c\u4e00\u4e9b\u64cd\u4f5c...\n        return \"Result from async task\";\n    });\n\n    \/\/ \u5728\u6b64\u671f\u95f4\uff0c\u4e3b\u7ebf\u7a0b\u53ef\u4ee5\u6267\u884c\u5176\u4ed6\u4efb\u52a1...\n\n    \/\/ \u83b7\u53d6\u5f02\u6b65\u64cd\u4f5c\u7684\u7ed3\u679c\n    std::string result = future.get();\n    std::cout &lt;&lt; result &lt;&lt; std::endl;\n\n    return 0;\n}<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Lambda\u548c<\/strong> <strong>std::funtion<\/strong><\/li>\n<\/ul>\n\n\n\n<p>\u8fd9\u4e24\u4e2a\u4e5f\u662f\u7ecf\u5e38\u7ed3\u5408\u5728\u4e00\u8d77\u4f7f\u7528\u7684\uff0c\u8ba9\u6211\u4eec\u6765\u8fd9\u4e2a\u5b58\u50a8\u53ef\u8c03\u7528\u7684\u56de\u8c03\u7684\u4f8b\u5b50\u5427\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;functional&gt;\n#include &lt;vector&gt;\n#include &lt;iostream&gt;\n#include &lt;thread&gt;\n\n\/\/ \u4e00\u4e2a\u5b58\u50a8 std::function \u5bf9\u8c61\u7684\u4efb\u52a1\u961f\u5217\nstd::vector&lt;std::function&lt;void()&gt;&gt; tasks;\n\n\/\/ \u6dfb\u52a0\u4efb\u52a1\u7684\u51fd\u6570\nvoid addTask(const std::function&lt;void()&gt;&amp; task) {\n    tasks.push_back(task);\n}\n\nint main() {\n    \/\/ \u6dfb\u52a0\u4e00\u4e2a Lambda \u8868\u8fbe\u5f0f\u4f5c\u4e3a\u4efb\u52a1\n    addTask(&#91;]() {\n        std::cout &lt;&lt; \"Task 1 executed\" &lt;&lt; std::endl;\n    });\n\n    \/\/ \u542f\u52a8\u4e00\u4e2a\u65b0\u7ebf\u7a0b\u6765\u5904\u7406\u4efb\u52a1\n    std::thread worker(&#91;]() {\n        for (auto&amp; task : tasks) {\n            task(); \/\/ \u6267\u884c\u4efb\u52a1\n        }\n    });\n\n    \/\/ \u4e3b\u7ebf\u7a0b\u7ee7\u7eed\u6267\u884c...\n    worker.join();\n\n    return 0;\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">9. \u6cdb\u578bLambda\uff08C++14\uff09<\/h3>\n\n\n\n<p>\u4f7f\u7528 auto \u5173\u952e\u5b57\u5728\u53c2\u6570\u5217\u8868\u4e2d\u8fdb\u884c\u7c7b\u578b\u63a8\u5bfc\u3002<\/p>\n\n\n\n<p><strong>\u6cdb\u578b\u57fa\u672c\u8bed\u6cd5\uff1a<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>auto lambda = &#91;](auto x, auto y) {\n    return x + y;\n};<\/code><\/pre>\n\n\n\n<p>\u4f7f\u7528\u4f8b\u5b50\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;numeric&gt;\n\nint main() {\n    std::vector&lt;int&gt; vi = {1, 2, 3, 4};\n    std::vector&lt;double&gt; vd = {1.1, 2.2, 3.3, 4.4, 5.5};\n\n    \/\/ \u4f7f\u7528\u6cdb\u578b Lambda \u6253\u5370 int \u7c7b\u578b\u7684\u5143\u7d20\n    std::for_each(vi.begin(), vi.end(), &#91;](auto n) {\n        std::cout &lt;&lt; n &lt;&lt; ' ';\n    });\n    std::cout &lt;&lt; '\\n';\n\n    \/\/ \u4f7f\u7528\u6cdb\u578b Lambda \u6253\u5370 double \u7c7b\u578b\u7684\u5143\u7d20\n    std::for_each(vd.begin(), vd.end(), &#91;](auto n) {\n        std::cout &lt;&lt; n &lt;&lt; ' ';\n    });\n    std::cout &lt;&lt; '\\n';\n\n    \/\/ \u4f7f\u7528\u6cdb\u578b Lambda \u8ba1\u7b97 int \u7c7b\u578b\u7684\u5411\u91cf\u7684\u548c\n    auto sum_vi = std::accumulate(vi.begin(), vi.end(), 0, &#91;](auto total, auto n) {\n        return total + n;\n    });\n    std::cout &lt;&lt; \"Sum of vi: \" &lt;&lt; sum_vi &lt;&lt; '\\n';\n\n    \/\/ \u4f7f\u7528\u6cdb\u578b Lambda \u8ba1\u7b97 double \u7c7b\u578b\u7684\u5411\u91cf\u7684\u548c\n    auto sum_vd = std::accumulate(vd.begin(), vd.end(), 0.0, &#91;](auto total, auto n) {\n        return total + n;\n    });\n    std::cout &lt;&lt; \"Sum of vd: \" &lt;&lt; sum_vd &lt;&lt; '\\n';\n\n    return 0;\n}<\/code><\/pre>\n\n\n\n<p>\u4e5f\u53ef\u4ee5\u505a\u4e00\u4e2a\u6253\u5370\u4efb\u4f55\u7c7b\u578b\u5bb9\u5668\u7684lambda\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;list&gt;\n\nint main() {\n    std::vector&lt;int&gt; vec{1, 2, 3, 4};\n    std::list&lt;double&gt; lst{1.1, 2.2, 3.3, 4.4};\n\n    auto print = &#91;](const auto&amp; container) {\n        for (const auto&amp; val : container) {\n            std::cout &lt;&lt; val &lt;&lt; ' ';\n        }\n        std::cout &lt;&lt; '\\n';\n    };\n\n    print(vec); \/\/ \u6253\u5370 vector&lt;int&gt;\n    print(lst); \/\/ \u6253\u5370 list&lt;double&gt;\n\n    return 0;\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">10. Lambda\u7684\u4f5c\u7528\u57df<\/h3>\n\n\n\n<p>\u9996\u5148\uff0cLambda\u53ef\u4ee5\u6355\u83b7\u5176\u5b9a\u4e49\u7684\u4f5c\u7528\u57df\u5185\u7684\u5c40\u90e8\u53d8\u91cf\uff0c\u6355\u83b7\u4e4b\u540e\uff0c\u5373\u4f7f\u539f\u4f5c\u7528\u57df\u7ed3\u675f\uff0c\u8fd9\u4e9b\u53d8\u91cf\u7684\u526f\u672c\u6216\u5f15\u7528\uff08\u53d6\u51b3\u4e8e\u6355\u83b7\u65b9\u5f0f\uff09\u4ecd\u7136\u53ef\u4ee5\u7ee7\u7eed\u4f7f\u7528\u3002<\/p>\n\n\n\n<p>\u9700\u8981\u7279\u522b\u6ce8\u610f\u7684\u70b9\u662f\uff0c\u5f15\u7528\u6355\u83b7\u4e00\u4e2a\u53d8\u91cf\uff0c\u5982\u679c\u8fd9\u4e2a\u53d8\u91cf\u539f\u5148\u6240\u5728\u7684\u4f5c\u7528\u57df\u5df2\u7ecf\u9500\u6bc1\uff0c\u90a3\u4e48\u8fd9\u5c31\u4f1a\u5bfc\u81f4\u672a\u5b9a\u4e49\u884c\u4e3a\u3002<\/p>\n\n\n\n<p>Lambda\u4e5f\u53ef\u4ee5\u6355\u83b7\u5168\u5c40\u53d8\u91cf\uff0c\u4f46\u662f\u6b64\u65f6\u5c31\u4e0d\u662f\u901a\u8fc7\u6355\u83b7\u5217\u8868\u5b9e\u73b0\u7684\u4e86\uff0c\u56e0\u4e3a\u5168\u5c40\u53d8\u91cf\u4e0d\u8bba\u5728\u54ea\u90fd\u53ef\u4ee5\u88ab\u8bbf\u95ee\u3002<\/p>\n\n\n\n<p>\u5982\u679c\u6709\u4e00\u4e2a Lambda \u5d4c\u5957\u5728\u53e6\u4e00\u4e2a Lambda \u5185\u90e8\uff0c\u5185\u90e8 Lambda \u53ef\u4ee5\u6355\u83b7\u5916\u90e8 Lambda \u7684\u6355\u83b7\u5217\u8868\u4e2d\u7684\u53d8\u91cf\u3002<\/p>\n\n\n\n<p>\u5f53 Lambda \u6355\u83b7\u4e86\u503c\uff0c\u5373\u4f7f\u539f\u672c\u7684\u503c\u6ca1\u4e86\u3001Lambda\u4e5f\u8d70\u4e86\uff08\u8fd4\u56de\u53bb\u522b\u7684\u5730\u65b9\u4e86\uff09\uff0c\u6240\u6709\u503c\u6355\u83b7\u7684\u53d8\u91cf\u4e5f\u5c06\u88ab\u590d\u5236\u5230 Lambda \u5bf9\u8c61\u4e2d\u3002\u8fd9\u4e9b\u53d8\u91cf\u7684\u751f\u547d\u5468\u671f\u5c06\u81ea\u52a8\u5ef6\u7eed\uff0c\u76f4\u5230 Lambda \u5bf9\u8c61\u672c\u8eab\u88ab\u9500\u6bc1\u3002\u4e0b\u9762\u4e3e\u4e00\u4e2a\u4f8b\u5b50\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;iostream&gt;\n#include &lt;functional&gt;\n\nstd::function&lt;void()&gt; createLambda() {\n    int localValue = 100;  \/\/ \u5c40\u90e8\u53d8\u91cf\n    return &#91;=]() mutable {  \/\/ \u4ee5\u503c\u6355\u83b7\u7684\u65b9\u5f0f\u590d\u5236localValue\n        std::cout &lt;&lt; localValue++ &lt;&lt; '\\n';\n    };\n}\n\nint main() {\n    auto myLambda = createLambda();  \/\/ Lambda\u590d\u5236\u4e86localValue\n    myLambda();  \/\/ \u5373\u4f7fcreateLambda\u7684\u4f5c\u7528\u57df\u5df2\u7ecf\u7ed3\u675f\uff0c\u590d\u5236\u7684localValue\u4ecd\u7136\u5b58\u5728\u4e8emyLambda\u4e2d\n    myLambda();  \/\/ \u53ef\u4ee5\u5b89\u5168\u5730\u7ee7\u7eed\u8bbf\u95ee\u548c\u4fee\u6539\u8be5\u526f\u672c\n}<\/code><\/pre>\n\n\n\n<p>\u5f53 Lambda \u6355\u83b7\u4e86\u5f15\u7528\uff0c\u5c31\u662f\u53e6\u5916\u4e00\u4e2a Story \u4e86\u3002\u806a\u660e\u7684\u8bfb\u8005\u5e94\u8be5\u4e5f\u80fd\u731c\u5230\uff0c\u5982\u679c\u539f\u59cb\u53d8\u91cf\u7684\u4f5c\u7528\u57df\u7ed3\u675f\u4e86\uff0cLambda \u4f9d\u8d56\u7684\u662f\u4e00\u4e2a\u60ac\u7a7a\u5f15\u7528\uff0c\u8fd9\u5c06\u5bfc\u81f4\u672a\u5b9a\u4e49\u7684\u884c\u4e3a\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">11. \u5b9e\u8df5 &#8211; \u51fd\u6570\u8ba1\u7b97\u5e93<\/h3>\n\n\n\n<p>\u5570\u91cc\u516b\u55e6\u8fd9\u4e48\u591a\uff0c\u73b0\u5728\u9700\u8981\u52a8\u624b\u5b9e\u8df5\u4e00\u4e0b\u4e86\u3002\u65e0\u8bba\u505a\u5565\uff0c\u76ee\u524d\u6211\u4eec\u9700\u8981\u638c\u63e1\u7684\u77e5\u8bc6\u70b9\u90fd\u662f\u90a3\u51e0\u4e2a\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6355\u83b7<\/li>\n\n\n\n<li>\u9ad8\u9636\u51fd\u6570<\/li>\n\n\n\n<li>\u53ef\u8c03\u7528\u5bf9\u8c61<\/li>\n\n\n\n<li>lambda\u5b58\u50a8<\/li>\n\n\n\n<li>\u53ef\u53d8Lambdas\uff08mutable\uff09<\/li>\n\n\n\n<li>\u6cdb\u578bLambda<\/li>\n<\/ul>\n\n\n\n<p><strong>\u6211\u4eec\u672c\u8282\u7684\u76ee\u6807\u662f\u521b\u5efa\u4e00\u4e2a\u6570\u5b66\u5e93\u3002\u652f\u6301\u5411\u91cf\u8fd0\u7b97\u3001\u77e9\u9635\u8fd0\u7b97\u4ee5\u53ca\u63d0\u4f9b\u4e00\u4e2a\u51fd\u6570\u89e3\u6790\u5668\uff0c\u5b83\u53ef\u4ee5\u63a5\u53d7\u5b57\u7b26\u4e32\u5f62\u5f0f\u7684\u6570\u5b66\u8868\u8fbe\u5f0f\u5e76\u8fd4\u56de\u4e00\u4e2a\u53ef\u8ba1\u7b97\u7684 Lambda\uff0c\u6211\u4eec\u9a6c\u4e0a\u5f00\u59cb\u5427\u3002<\/strong><\/p>\n\n\n\n<p>\u8fd9\u4e2a\u9879\u76ee\u4ece\u7b80\u5355\u7684\u6570\u5b66\u51fd\u6570\u8ba1\u7b97\u5f00\u59cb\uff0c\u9010\u6b65\u6269\u5c55\u5230\u590d\u6742\u7684\u6570\u5b66\u8868\u8fbe\u5f0f\u89e3\u6790\u548c\u8ba1\u7b97\u3002\u9879\u76ee\u7f16\u5199\u6b65\u9aa4\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u57fa\u672c\u5411\u91cf\u548c\u77e9\u9635\u8fd0\u7b97<\/strong><\/li>\n\n\n\n<li><strong>\u51fd\u6570\u89e3\u6790\u5668<\/strong><\/li>\n\n\n\n<li><strong>\u66f4\u9ad8\u7ea7\u7684\u6570\u5b66\u51fd\u6570<\/strong><\/li>\n\n\n\n<li><strong>\u590d\u5408\u51fd\u6570<\/strong><\/li>\n\n\n\n<li><strong>\u9ad8\u9636\u6570\u5b66\u64cd\u4f5c<\/strong><\/li>\n\n\n\n<li><strong>\u66f4\u591a\u62d3\u5c55\u2026<\/strong><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u57fa\u672c\u5411\u91cf\u548c\u77e9\u9635\u8fd0\u7b97<\/h3>\n\n\n\n<p>\u9996\u5148\u5b9a\u4e49\u5411\u91cf\u548c\u77e9\u9635\u7684\u6570\u636e\u7ed3\u6784\uff0c\u5b9e\u73b0\u57fa\u672c\u7684\u7b97\u672f\u8fd0\u7b97\uff08\u52a0\u51cf\uff09\u3002<\/p>\n\n\n\n<p>\u4e3a\u4e86\u7b80\u5316\u9879\u76ee\uff0c\u4e13\u6ce8\u4e0eLambda\u7684\u4f7f\u7528\uff0c\u6211\u6ca1\u6709\u4f7f\u7528\u6a21\u7248\uff0c\u56e0\u6b64\u6240\u6709\u7684\u6570\u636e\u7528 std::vector \u5b9e\u73b0\u3002<\/p>\n\n\n\n<p>\u5728\u4e0b\u9762\u4ee3\u7801\u4e2d\uff0c\u6211\u5df2\u7ecf\u5b9e\u73b0\u4e86\u4e00\u4e2a\u6700\u57fa\u672c\u7684\u5411\u91cf\u6846\u67b6\u3002\u8bf7\u8bfb\u8005\u81ea\u884c\u5b8c\u5584\u6846\u67b6\uff0c\u5305\u62ec\u5411\u91cf\u7684\u51cf\u6cd5\u3001\u70b9\u4e58\u7b49\u64cd\u4f5c\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Vector.h\n#include &lt;vector&gt;\n#include &lt;ostream&gt;\n\nclass Vector {\nprivate:\n    std::vector&lt;double&gt; elements;\npublic:\n    \/\/ \u6784\u9020\u51fd\u6570 - explicit\u9632\u6b62\u9690\u5f0f\u8f6c\u6362\n    Vector() = default;\n    explicit Vector(const std::vector&lt;double&gt; &amp;elems);\n\n    Vector operator+const Vector&amp; rhs) const;\n\n    \/\/ \u83b7\u53d6\u5411\u91cf\u5927\u5c0f\n    &#91;&#91;nodiscard]] size_t size() const { return elements.size(); }\n\n    \/\/ \u8bbf\u95ee\u5143\u7d20\uff0c\u8fd4\u56de\u5bf9\u8c61\u7684\u5f15\u7528 double&amp;\u3002\u5982\u679cVector\u5bf9\u8c61\u662f\u5e38\u91cf\uff0c\u5c31\u4f7f\u7528\u4e0b\u9762\u7684\u7248\u672c\n    double&amp; operator&#91;](size_t index) { return elements&#91;index]; }\n    const double&amp; operator&#91;](size_t index) const { return elements&#91;index]; }\n\n    \/\/ \u8fed\u4ee3\u5668\u652f\u6301\n    auto begin() { return elements.begin(); }\n    auto end() { return elements.end(); }\n    auto begin() const { return elements.cbegin(); }\n    auto end() const { return elements.cend(); }\n\n    \/\/ \u8ba9\u91cd\u8f7d\u7684\u6d41\u8f93\u51fa\u8fd0\u7b97\u7b26\u6210\u4e3a\u53cb\u5143\u51fd\u6570\uff0c\u4ee5\u4fbf\u5b83\u53ef\u4ee5\u8bbf\u95ee\u79c1\u6709\u6210\u5458\n    friend std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, const Vector&amp; v);\n};\n\/\/\/ Vector.cpp\n#include \"Vector.h\"\nVector::Vector(const std::vector&lt;double&gt;&amp; elems) : elements(elems){}\n\nVector Vector::operator+(const Vector &amp;rhs) const {\n    \/\/ \u9996\u5148\u786e\u4fdd\u4e24\u4e2a\u5411\u91cf\u4e00\u81f4\n    if( this-&gt;size() != rhs.size() )\n        throw std::length_error(\"\u5411\u91cf\u5927\u5c0f\u4e0d\u4e00\u81f4\uff01\");\n    Vector result;\n    result.elements.reserve(this-&gt;size()); \/\/ \u63d0\u524d\u5206\u914d\u5185\u5b58\n    \/\/ \u4f7f\u7528\u8fed\u4ee3\u5668\u904d\u5386\u5411\u91cf\u5404\u4e2a\u5143\u7d20\n    std::transform(this-&gt;begin(), this-&gt;end(), rhs.begin(), std::back_inserter(result.elements),\n                   &#91;](double_t a,double_t b){ return a+b; });\n    return result;\n}\n\nstd::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, const Vector&amp; v) {\n    os &lt;&lt; '&#91;';\n    for (size_t i = 0; i &lt; v.elements.size(); ++i) {\n        os &lt;&lt; v.elements&#91;i];\n        if (i &lt; v.elements.size() - 1) {\n            os &lt;&lt; \", \";\n        }\n    }\n    os &lt;&lt; ']';\n    return os;\n}<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u53ef\u4ee5\u5728\u58f0\u660e\u8fd0\u7b97\u64cd\u4f5c\u4e2d\u4f7f\u7528 [[nodiscard]] \u6807\u7b7e\uff0c\u63d0\u9192\u7f16\u8bd1\u5668\u6ce8\u610f\u68c0\u67e5\u8fd4\u56de\u503c\u662f\u5426\u5f97\u5230\u4f7f\u7528\uff0c\u7136\u540e\u4f7f\u7528\u8be5\u5e93\u7684\u7528\u6237\u5c31\u53ef\u4ee5\u5728\u7f16\u8f91\u5668\u4e2d\u5f97\u5230\u63d0\u9192\uff0c\u4f8b\u5982\u4e0b\u9762\u3002<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">\u51fd\u6570\u89e3\u6790\u5668<\/h3>\n\n\n\n<p>\u8bbe\u8ba1\u4e00\u4e2a\u51fd\u6570\u89e3\u6790\u5668\uff0c\u5b83\u53ef\u4ee5\u5c06\u5b57\u7b26\u4e32\u5f62\u5f0f\u7684\u6570\u5b66\u8868\u8fbe\u5f0f\u8f6c\u6362\u4e3a Lambda \u8868\u8fbe\u5f0f\u3002<\/p>\n\n\n\n<p>\u521b\u5efa\u4e00\u4e2a\u80fd\u591f\u89e3\u6790\u5b57\u7b26\u4e32\u5f62\u5f0f\u7684\u6570\u5b66\u8868\u8fbe\u5f0f\u5e76\u8f6c\u6362\u4e3a Lambda \u8868\u8fbe\u5f0f\u7684\u51fd\u6570\u89e3\u6790\u5668\u6d89\u53ca\u5230\u89e3\u6790\u7406\u8bba\uff0c\u4e3a\u4e86\u7b80\u5316\u4f8b\u5b50\uff0c\u6211\u4eec\u76ee\u524d\u53ea\u89e3\u6790\u6700\u57fa\u672c\u7684 + \u548c &#8211; \u3002\u7136\u540e\u5c06\u51fd\u6570\u89e3\u6790\u5668\u6253\u5305\u8fdb\u4e00\u4e2a ExpressionParser \u7684\u5de5\u5177\u7c7b\u91cc\u9762\u3002<\/p>\n\n\n\n<p>\u9996\u5148\u6211\u4eec\u5148\u521b\u5efa\u4e00\u4e2a\u8bc6\u522b\u51fa + \u53f7\u548c &#8211; \u53f7\u7684\u89e3\u6790\u5668\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ ExpressionParser.h\n#include &lt;functional&gt;\n#include &lt;string&gt;\n\nusing ExprFunction = std::function&lt;double(double, double)&gt;;\n\nclass ExpressionParser {\npublic:\n    static ExprFunction parse_simple_expr(const std::string&amp; expr);\n};\n\/\/ ExpressionParser.cpp\n#include \"ExpressionParser.h\"\n\nExprFunction ExpressionParser::parse_simple_expr\n        (const std::string &amp;expr)\n{\n    if (expr.find('+') != std::string::npos) {\n        return &#91;](double x, double y) { return x + y; };\n    }\n    else if (expr.find('-') != std::string::npos) {\n        return &#91;](double x, double y) { return x - y; };\n    }\n    \/\/ \u66f4\u591a\u64cd\u4f5c...\n    return nullptr;\n}<\/code><\/pre>\n\n\n\n<p>\u8fd9\u4e00\u6bb5\u4e0eLambda\u5173\u7cfb\u4e0d\u5927\uff0c\u53ef\u8df3\u8fc7\u3002\u7136\u540e\u6211\u4eec\u53ef\u4ee5\u5728\u8fd9\u4e2a\u57fa\u7840\u4e0a\uff0c\u6539\u8fdb\u51fd\u6570\u89e3\u6790\u5668\u4ee5\u8bc6\u522b\u6570\u5b57\u3002\u5c06\u5b57\u7b26\u4e32\u5206\u5272\u6210\u4ee4\u724c\uff08\u6570\u5b57\u548c\u64cd\u4f5c\u7b26\uff09\uff0c\u7136\u540e\u6839\u636e\u64cd\u4f5c\u7b26\u6267\u884c\u64cd\u4f5c\u3002\u5bf9\u4e8e\u66f4\u52a0\u590d\u6742\u7684\u8868\u8fbe\u5f0f\uff0c\u5c31\u9700\u8981\u4f7f\u7528\u6bd4\u5982RPN\u7b49\u7b97\u6cd5\u6216\u8005\u73b0\u6709\u7684\u89e3\u6790\u5e93\uff0c\u8fd9\u91cc\u5c31\u4e0d\u5f04\u8fd9\u4e48\u590d\u6742\u4e86\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ ExpressionParser.h\n...\n#include &lt;sstream&gt;\n...\nstatic double parse_and_compute(const std::string&amp; expr);\n...\n\/\/ ExpressionParser.cpp\n...\ndouble ExpressionParser::parse_and_compute(const std::string&amp; expr) {\n    std::istringstream iss(expr);\n    std::vector&lt;std::string&gt; tokens;\n    std::string token;\n    while (iss &gt;&gt; token) {\n        tokens.push_back(token);\n    }\n\n    if (tokens.size() != 3) {\n        throw std::runtime_error(\"Invalid expression format.\");\n    }\n\n    double num1 = std::stod(tokens&#91;0]);\n    const std::string&amp; op = tokens&#91;1];\n    double num2 = std::stod(tokens&#91;2]);\n\n    if (op == \"+\") {\n        return num1 + num2;\n    } else if (op == \"-\") {\n        return num1 - num2;\n    } else {\n        throw std::runtime_error(\"Unsupported operator.\");\n    }\n}<\/code><\/pre>\n\n\n\n<p>\u6d4b\u8bd5\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ main.cpp\n#include \"ExpressionParser.h\"\n...\nstd::string expr = \"10 - 25\";\nstd::cout &lt;&lt; expr &lt;&lt; \" = \" &lt;&lt; ExpressionParser::parse_and_compute(expr) &lt;&lt; std::endl;<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u611f\u5174\u8da3\u7684\u8bfb\u8005\u4e5f\u53ef\u4ee5\u5c1d\u8bd5\u89e3\u6790\u591a\u4e2a\u8fd0\u7b97\u7b26\u7684\u7b97\u6cd5\uff0c\u4f7f\u7528\u64cd\u4f5c\u7b26\u4f18\u5148\u7ea7\u89e3\u6790\u7b97\u6cd5\uff08\u5982Shunting Yard\u7b97\u6cd5\uff09\u6765\u8f6c\u6362\u4e2d\u7f00\u8868\u8fbe\u5f0f\u4e3a\u9006\u6ce2\u5170\u8868\u793a\u6cd5\uff08RPN\uff09\u3002\u4e0b\u9762 <del>\u5c55\u793a<\/del> \u80e1\u626f \u4e00\u4e0b\u6570\u636e\u7ed3\u6784\u7684\u77e5\u8bc6\uff0c\u4e0eLambda\u5173\u7cfb\u4e0d\u5927\u3002<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;iostream&gt;\n#include &lt;stack&gt;\n#include &lt;vector&gt;\n#include &lt;sstream&gt;\n#include &lt;map&gt;\n#include &lt;cctype&gt;\n\n\/\/ \u786e\u5b9a\u662f\u5426\u4e3a\u64cd\u4f5c\u7b26\nbool is_operator(const std::string&amp; token) {\n    return token == \"+\" || token == \"-\" || token == \"*\" || token == \"\/\";\n}\n\n\/\/ \u786e\u5b9a\u64cd\u4f5c\u7b26\u4f18\u5148\u7ea7\nint precedence(const std::string&amp; token) {\n    if (token == \"+\" || token == \"-\") return 1;\n    if (token == \"*\" || token == \"\/\") return 2;\n    return 0;\n}\n\n\/\/ \u5c06\u4e2d\u7f00\u8868\u8fbe\u5f0f\u8f6c\u6362\u4e3a\u9006\u6ce2\u5170\u8868\u793a\u6cd5\nstd::vector&lt;std::string&gt; infix_to_rpn(const std::vector&lt;std::string&gt;&amp; tokens) {\n    std::vector&lt;std::string&gt; output;\n    std::stack&lt;std::string&gt; operators;\n\n    for (const auto&amp; token : tokens) {\n        if (is_operator(token)) {\n            while (!operators.empty() &amp;&amp; precedence(operators.top()) &gt;= precedence(token)) {\n                output.push_back(operators.top());\n                operators.pop();\n            }\n            operators.push(token);\n        } else if (token == \"(\") {\n            operators.push(token);\n        } else if (token == \")\") {\n            while (!operators.empty() &amp;&amp; operators.top() != \"(\") {\n                output.push_back(operators.top());\n                operators.pop();\n            }\n            if (!operators.empty()) operators.pop();\n        } else {\n            output.push_back(token);\n        }\n    }\n\n    while (!operators.empty()) {\n        output.push_back(operators.top());\n        operators.pop();\n    }\n\n    return output;\n}\n\n\/\/ \u8ba1\u7b97\u9006\u6ce2\u5170\u8868\u793a\u6cd5\ndouble compute_rpn(const std::vector&lt;std::string&gt;&amp; tokens) {\n    std::stack&lt;double&gt; operands;\n\n    for (const auto&amp; token : tokens) {\n        if (is_operator(token)) {\n            double rhs = operands.top(); operands.pop();\n            double lhs = operands.top(); operands.pop();\n            if (token == \"+\") operands.push(lhs + rhs);\n            else if (token == \"-\") operands.push(lhs - rhs);\n            else if (token == \"*\") operands.push(lhs * rhs);\n            else operands.push(lhs \/ rhs);\n        } else {\n            operands.push(std::stod(token));\n        }\n    }\n\n    return operands.top();\n}\n\n\/\/ \u4e3b\u51fd\u6570\nint main() {\n    std::string input = \"3 + 4 * 2 \/ ( 1 - 5 )\";\n    std::istringstream iss(input);\n    std::vector&lt;std::string&gt; tokens;\n    std::string token;\n    while (iss &gt;&gt; token) {\n        tokens.push_back(token);\n    }\n\n    auto rpn = infix_to_rpn(tokens);\n    for (const auto&amp; t : rpn) {\n        std::cout &lt;&lt; t &lt;&lt; \" \";\n    }\n    std::cout &lt;&lt; std::endl;\n\n    double result = compute_rpn(rpn);\n    std::cout &lt;&lt; \"Result: \" &lt;&lt; result &lt;&lt; std::endl;\n\n    return 0;\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u66f4\u9ad8\u7ea7\u7684\u6570\u5b66\u51fd\u6570<\/h3>\n\n\n\n<p><strong>\u5047\u8bbe<\/strong>\u6211\u4eec\u7684\u89e3\u6790\u5668\u5df2\u7ecf\u80fd\u591f\u8bc6\u522b\u51fa\u4e86\u66f4\u9ad8\u7ea7\u7684\u6570\u5b66\u64cd\u4f5c\uff0c\u5982\u4e09\u89d2\u51fd\u6570\u3001\u5bf9\u6570\u3001\u6307\u6570\u7b49\uff0c\u6211\u4eec\u5c31\u9700\u8981\u4e3a\u5bf9\u5e94\u7684\u64cd\u4f5c\u63d0\u4f9b\u4e00\u4e2aLambda\u8868\u8fbe\u5f0f\u3002<\/p>\n\n\n\n<p>\u9996\u5148\u6211\u4eec\u4fee\u6539\u4e24\u79cd\u4e0d\u540c\u7b7e\u540d\u7684 std::function \u7684\u522b\u540d\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ ExpressionParser.cpp\nusing UnaryFunction = std::function&lt;double(double)&gt;;\nusing BinaryFunction = std::function&lt;double(double, double)&gt;;\n\n...\n\n\/\/ ExpressionParser.cpp\nUnaryFunction ExpressionParser::parse_complex_expr\n        (const std::string&amp; expr)\n{\n    using _t = std::unordered_map&lt;std::string, UnaryFunction&gt;;\n    static const _t functions = {\n            {\"sin\", &#91;](double x) -&gt; double { return std::sin(x); }},\n            {\"cos\", &#91;](double x) -&gt; double { return std::cos(x); }},\n            {\"log\", &#91;](double x) -&gt; double { return std::log(x); }},\n            \/\/ ... \u6dfb\u52a0\u66f4\u591a\u51fd\u6570\n    };\n    auto it = functions.find(expr);\n    if (it != functions.end()) {\n        return it-&gt;second;\n    } else {\n        \/\/ \u5904\u7406\u9519\u8bef\u6216\u8fd4\u56de\u4e00\u4e2a\u9ed8\u8ba4\u7684\u51fd\u6570\n        return &#91;](double) -&gt; double { return 0.0; }; \/\/ \u793a\u4f8b\u9519\u8bef\u5904\u7406\n    }\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u590d\u5408\u51fd\u6570<\/h3>\n\n\n\n<p>\u5b9e\u73b0\u590d\u5408\u6570\u5b66\u51fd\u6570\u7684\u529f\u80fd\uff0c\u53ef\u4ee5\u901a\u8fc7\u7ec4\u5408\u591a\u4e2a Lambda \u8868\u8fbe\u5f0f\u6765\u5b9e\u73b0\u3002\u4e0b\u9762\u662f\u4e00\u4e2a\u5c0f\u4f8b\u5b50\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;iostream&gt;\n#include &lt;cmath&gt;\n#include &lt;functional&gt;\n\nint main() {\n    \/\/ \u5b9a\u4e49\u7b2c\u4e00\u4e2a\u51fd\u6570 f(x) = sin(x)\n    auto f = &#91;](double x) {\n        return std::sin(x);\n    };\n\n    \/\/ \u5b9a\u4e49\u7b2c\u4e8c\u4e2a\u51fd\u6570 g(x) = cos(x)\n    auto g = &#91;](double x) {\n        return std::cos(x);\n    };\n\n    \/\/ \u521b\u5efa\u590d\u5408\u51fd\u6570 h(x) = g(f(x)) = cos(sin(x))\n    auto h = &#91;f, g](double x) {\n        return g(f(x));\n    };\n\n    \/\/ \u4f7f\u7528\u590d\u5408\u51fd\u6570\n    double value = M_PI \/ 4;  \/\/ PI\/4\n    std::cout &lt;&lt; \"h(pi\/4) = cos(sin(pi\/4)) = \" &lt;&lt; h(value) &lt;&lt; std::endl;\n\n    return 0;\n}<\/code><\/pre>\n\n\n\n<p>\u5982\u679c\u60f3\u8981\u4e00\u4e2a\u66f4\u590d\u6742\u7684\u590d\u5408\u51fd\u6570\uff0c\u6bd4\u5982\u8bf4 $\\text{cos}(\\text{sin}(\\text{exp}(x))$ \uff0c\u53ef\u4ee5\u8fd9\u6837\u505a\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>auto exp_func = &#91;](double x) {\n    return std::exp(x);\n};\n\n\/\/ \u521b\u5efa\u590d\u5408\u51fd\u6570 h(x) = cos(sin(exp(x)))\nauto h_complex = &#91;f, g, exp_func](double x) {\n    return g(f(exp_func(x)));\n};\n\nstd::cout &lt;&lt; \"h_complex(1) = cos(sin(exp(1))) = \" &lt;&lt; h_complex(1) &lt;&lt; std::endl;<\/code><\/pre>\n\n\n\n<p>\u4f7f\u7528 Lambda \u8868\u8fbe\u5f0f\u8fdb\u884c\u51fd\u6570\u7ec4\u5408\u7684\u4f18\u70b9\u4e4b\u4e00\u662f\u5b83\u4eec\u5141\u8bb8\u4f60\u8f7b\u677e\u5730\u521b\u5efa\u9ad8\u9636\u51fd\u6570\uff0c\u4e5f\u5c31\u662f\u5c42\u5c42\u5957\u5a03\u7684\u590d\u5408\u51fd\u6570\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>auto compose = &#91;](auto f, auto g) {\n    return &#91;f, g](double x) {\n        return g(f(x));\n    };\n};\n\nauto h_composed = compose(f, g);\nstd::cout &lt;&lt; \"h_composed(pi\/4) = \" &lt;&lt; h_composed(M_PI \/ 4) &lt;&lt; std::endl;<\/code><\/pre>\n\n\n\n<p>\u4e0a\u9762\u8fd9\u4e2a\u4f8b\u5b50\u5c31\u662f\u9ad8\u9636\u51fd\u6570\u7684\u6838\u5fc3\u601d\u60f3\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u9ad8\u9636\u6570\u5b66\u64cd\u4f5c<\/h3>\n\n\n\n<p>\u5b9e\u73b0\u5fae\u5206\u548c\u79ef\u5206\u8ba1\u7b97\u5668\uff0c\u8fd9\u4e9b\u64cd\u4f5c\u53ef\u4ee5\u4f7f\u7528 Lambda \u8868\u8fbe\u5f0f\u6765\u8fd1\u4f3c\u6570\u5b66\u51fd\u6570\u7684\u5bfc\u6570\u548c\u79ef\u5206\u3002<\/p>\n\n\n\n<p>\u8fd9\u91cc\u7684\u5fae\u5206\u4f7f\u7528\u6570\u503c\u5fae\u5206\u7684\u524d\u5411\u5dee\u5206\u6cd5\u6765\u8fd1\u4f3c\u5012\u6570 $f'(x)$ \u3002<\/p>\n\n\n\n<p>\u79ef\u5206\u91c7\u7528\u68af\u5f62\u6cd5\u5219\u7684\u6570\u503c\u79ef\u5206\u65b9\u6cd5\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u5fae\u5206\nauto derivative = &#91;](auto func, double h = 1e-5) {\n    return &#91;func, h](double x) {\n        return (func(x + h) - func(x)) \/ h;\n    };\n};\n\/\/ \u4f8b\u5982\uff0c\u5bf9 sin(x) \u7684\u5fae\u5206\nauto sin_derivative = derivative(&#91;](double x) { return std::sin(x); });\nstd::cout &lt;&lt; \"sin'(pi\/4) \u2248 \" &lt;&lt; sin_derivative(M_PI \/ 4) &lt;&lt; std::endl;\n\n\n\/\/ \u79ef\u5206 - \u79ef\u5206\u4e0b\u9650 a\uff0c\u79ef\u5206\u4e0a\u9650 b \u548c\u5206\u5272\u6570\u91cf n \nauto trapezoidal_integral = &#91;](auto func, double a, double b, int n = 1000) {\n    double h = (b - a) \/ n;\n    double sum = 0.5 * (func(a) + func(b));\n    for (int i = 1; i &lt; n; i++) {\n        sum += func(a + i * h);\n    }\n    return sum * h;\n};\n\/\/ \u4f8b\u5982\uff0c\u5bf9 sin(x) \u5728 0 \u5230 pi\/2 \u4e0a\u7684\u79ef\u5206\nauto integral_sin = trapezoidal_integral(&#91;](double x) { return std::sin(x); }, 0, M_PI \/ 2);\nstd::cout &lt;&lt; \"\u222bsin(x)dx from 0 to pi\/2 \u2248 \" &lt;&lt; integral_sin &lt;&lt; std::endl;<\/code><\/pre>\n\n\n\n<p><strong>\u6570\u503c\u5fae\u5206 &#8211; \u524d\u5411\u5dee\u5206\u6cd5<\/strong><\/p>\n\n\n\n<p>\u5bf9\u51fd\u6570 $$f(x)$$ \u5728\u70b9 $$x$$ \u5904\u7684\u5bfc\u6570\u7684\u6570\u503c\u8fd1\u4f3c\u53ef\u4ee5\u901a\u8fc7\u524d\u5411\u5dee\u5206\u516c\u5f0f\u7ed9\u51fa :<\/p>\n\n\n\n<p>\u8fd9\u91cc\u7684 $$h$$ \u4ee3\u8868 $$x$$ \u503c\u7684\u4e00\u4e2a\u5fae\u5c0f\u589e\u52a0\u3002\u5f53 $$h$$ \u8d8b\u5411\u4e8e 0 \u65f6\uff0c\u8fd9\u4e2a\u6bd4\u7387\u4f1a\u8d8b\u5411\u4e8e\u5bfc\u6570\u7684\u771f\u5b9e\u503c\u3002\u5728\u4ee3\u7801\u4e2d\u6211\u4eec\u8bbe\u7f6e\u4e86\u4e00\u4e2a\u6bd4\u8f83\u5c0f\u7684\u6570\u503c $$10^{-5}$$ \u3002<\/p>\n\n\n\n<p><strong>\u6570\u503c\u79ef\u5206 &#8211; \u68af\u5f62\u6cd5\u5219<\/strong><\/p>\n\n\n\n<p>\u5b9a\u79ef\u5206 $$\\int_a^b f(x) d x$$ \u7684\u6570\u503c\u8fd1\u4f3c\u53ef\u4ee5\u4f7f\u7528\u68af\u5f62\u6cd5\u5219\u6765\u8ba1\u7b97 :<\/p>\n\n\n\n<p>\u5176\u4e2d $$n$$ \u662f\u533a\u95f4 $$[ a, b ]$$ \u88ab\u5206\u6210\u7684\u5c0f\u533a\u95f4\u7684\u6570\u91cf\uff0c $$h$$ \u662f\u6bcf\u4e2a\u5c0f\u533a\u95f4\u7684\u5bbd\u5ea6\uff0c\u8ba1\u7b97\u65b9\u6cd5\u4e3a:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e2d\u7ea7\u7bc7<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1. Lambda\u7684\u5e95\u5c42\u5b9e\u73b0<\/h3>\n\n\n\n<p>\u4ece\u8868\u9762\u4e0a\u770b\uff0clambda\u8868\u8fbe\u5f0f\u4f3c\u4e4e\u53ea\u662f\u8bed\u6cd5\u7cd6\uff0c\u4f46\u5b9e\u9645\u4e0a\uff0c\u7f16\u8bd1\u5668\u4f1a\u5bf9\u6bcf\u4e2alambda\u8868\u8fbe\u5f0f\u505a\u4e00\u4e9b\u5e95\u5c42\u8f6c\u6362\u3002<\/p>\n\n\n\n<p>\u9996\u5148\uff0c\u6bcf\u4e2alambda\u8868\u8fbe\u5f0f\u7684\u7c7b\u578b\u90fd\u662f\u72ec\u4e00\u65e0\u4e8c\u7684\uff0c\u7f16\u8bd1\u5668\u4f1a\u4e3a\u6bcf\u4e2alambda\u751f\u6210\u4e00\u4e2a\u552f\u4e00\u7684\u7c7b\u7c7b\u578b\uff0c\u8fd9\u901a\u5e38\u88ab\u79f0\u4e3a<strong>\u95ed\u5305\u7c7b\u578b<\/strong>\u3002<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u95ed\u5305(closure)\u8fd9\u4e2a\u6982\u5ff5\u6765\u6e90\u4e8e\u6570\u5b66\u4e2d\u7684\u95ed\u5305\uff0c\u5b83\u6307\u7684\u662f\u4e00\u79cd\u7ed3\u6784\uff0c\u8fd9\u79cd\u7ed3\u6784\u5185\u90e8\u7684\u64cd\u4f5c\u662f\u5c01\u95ed\u7684\uff0c\u4e0d\u4f9d\u8d56\u4e8e\u7ed3\u6784\u5916\u90e8\u7684\u5143\u7d20\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u4efb\u4f55\u5bf9\u96c6\u5408\u5185\u5143\u7d20\u5e94\u7528\u8fd9\u4e2a\u64cd\u4f5c\u7684\u7ed3\u679c\u4ecd\u7136\u4f1a\u5728\u8fd9\u4e2a\u96c6\u5408\u5185\u3002\u5728\u7f16\u7a0b\u4e2d\uff0c\u8fd9\u4e2a\u8bcd\u88ab\u7528\u6765\u63cf\u8ff0\u4e00\u4e2a\u51fd\u6570\u4e0e\u5176\u4e0a\u4e0b\u6587\u73af\u5883\u7684\u7ec4\u5408\u3002 \u4e00\u4e2a\u95ed\u5305\u5141\u8bb8\u4f60\u8bbf\u95ee\u4e00\u4e2a\u5916\u90e8\u51fd\u6570\u4f5c\u7528\u57df\u4e2d\u7684\u53d8\u91cf\uff0c\u5373\u4f7f\u8fd9\u4e2a\u5916\u90e8\u51fd\u6570\u5df2\u7ecf\u6267\u884c\u7ed3\u675f\u3002\u51fd\u6570\u201c\u5c01\u95ed\u201d\u4e86\u6216\u201c\u6355\u83b7\u201d\u4e86\u5176\u521b\u5efa\u65f6\u7684\u73af\u5883\u72b6\u6001\u3002 lambda\u8868\u8fbe\u5f0f\u9ed8\u8ba4\u60c5\u51b5\u4e0b\u751f\u6210\u7684\u95ed\u5305\u7c7b\u7684operator()\u662fconst\u7684\uff0c\u8fd9\u4e2a\u60c5\u51b5\u4e0b\u5f00\u53d1\u8005\u4e0d\u80fd\u4fee\u6539\u95ed\u5305\u5185\u90e8\u7684\u4efb\u4f55\u6570\u636e\uff0c\u5373\u4fdd\u8bc1\u4e86\u5b83\u4eec\u4e0d\u4f1a\u4fee\u6539\u6355\u83b7\u7684\u503c\uff0c\u8fd9\u4e0e\u95ed\u5305\u7684\u6570\u5b66\u548c\u51fd\u6570\u5f0f\u8d77\u6e90\u76f8\u7b26\u3002<\/p>\n<\/blockquote>\n\n\n\n<p>\u7f16\u8bd1\u5668\u4e3a\u6bcf\u4e2alambda\u8868\u8fbe\u5f0f\u751f\u6210\u4e00\u4e2a<strong>\u95ed\u5305\u7c7b<\/strong>\u3002\u8fd9\u4e2a\u7c7b<strong>\u91cd\u8f7d<\/strong>\u4e86operator()\uff0c\u4f7f\u5f97\u95ed\u5305\u5bf9\u8c61\u53ef\u4ee5\u50cf\u51fd\u6570\u4e00\u6837\u88ab\u8c03\u7528\u3002\u8fd9\u4e2a\u91cd\u8f7d\u7684\u64cd\u4f5c\u7b26\u5305\u542b\u4e86lambda\u8868\u8fbe\u5f0f\u7684\u4ee3\u7801\u3002<\/p>\n\n\n\n<p>lambda\u8868\u8fbe\u5f0f\u53ef\u4ee5<strong>\u6355\u83b7<\/strong>\u5916\u90e8\u53d8\u91cf\uff0c\u8fd9\u901a\u8fc7\u95ed\u5305\u7c7b\u7684\u6210\u5458\u53d8\u91cf\u5b9e\u73b0\u3002\u6355\u83b7\u53ef\u4ee5\u662f\u503c\u6355\u83b7\u6216\u5f15\u7528\u6355\u83b7\uff0c\u5206\u522b\u5bf9\u5e94\u4e8e\u95ed\u5305\u7c7b\u4e2d\u503c\u7684\u590d\u5236\u548c\u5f15\u7528\u7684\u5b58\u50a8\u3002<\/p>\n\n\n\n<p>\u95ed\u5305\u7c7b\u6709\u4e00\u4e2a\u6784\u9020\u51fd\u6570\uff0c\u8be5\u6784\u9020\u51fd\u6570\u7528\u4e8e\u521d\u59cb\u5316\u6355\u83b7\u7684\u5916\u90e8\u53d8\u91cf\u3002\u5982\u679c\u662f\u503c\u6355\u83b7\uff0c\u8fd9\u4e9b\u503c\u4f1a\u88ab\u590d\u5236\u5230\u95ed\u5305\u5bf9\u8c61\u4e2d\u3002\u5982\u679c\u662f\u5f15\u7528\u6355\u83b7\uff0c\u5916\u90e8\u53d8\u91cf\u7684\u5f15\u7528\u4f1a\u88ab\u5b58\u50a8\u3002<\/p>\n\n\n\n<p>\u5f53\u8c03\u7528lambda\u8868\u8fbe\u5f0f\u65f6\uff0c\u5b9e\u9645\u4e0a\u662f\u8c03\u7528\u95ed\u5305\u5bf9\u8c61\u7684operator()\u3002<\/p>\n\n\n\n<p>\u5047\u8bbelambda\u8868\u8fbe\u5f0f\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;capture](parameters) -&gt; return_type { body }<\/code><\/pre>\n\n\n\n<p>\u4e00\u6bb5\u7f16\u8bd1\u5668\u53ef\u80fd\u4f1a\u751f\u6210\u7684\u4f2a\u4ee3\u7801\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u95ed\u5305\u7c7b\u7684\u4f2a\u4ee3\u7801\u53ef\u80fd\u5982\u4e0b\u6240\u793a\uff1a\nclass UniqueClosureName {\nprivate:\n    \/\/ \u6355\u83b7\u7684\u53d8\u91cf\n    capture_type captured_variable;\n\npublic:\n    \/\/ \u6784\u9020\u51fd\u6570\uff0c\u7528\u4e8e\u521d\u59cb\u5316\u6355\u83b7\u7684\u53d8\u91cf\n    UniqueClosureName(capture_type captured) : captured_variable(captured) {}\n\n    \/\/ \u91cd\u8f7d\u7684\u51fd\u6570\u8c03\u7528\u64cd\u4f5c\u7b26\n    return_type operator()(parameter_type parameters) const {\n        \/\/ lambda\u8868\u8fbe\u5f0f\u7684\u4e3b\u4f53\n        body\n    }\n};\n\n\/\/ \u4f7f\u7528\u95ed\u5305\u7c7b\u7684\u5b9e\u4f8b\nUniqueClosureName closure_instance(captured_value);\nauto result = closure_instance(parameters); \/\/ \u8fd9\u76f8\u5f53\u4e8e\u8c03\u7528lambda\u8868\u8fbe\u5f0f<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2. Lambda\u7684\u7c7b\u578b\u548cdecltype\u4e0e\u6761\u4ef6\u7f16\u8bd1constexpr\uff08C++17\uff09<\/h3>\n\n\n\n<p>\u6211\u4eec\u77e5\u9053\uff0c\u6bcf\u4e2alambda\u8868\u8fbe\u5f0f\u90fd\u6709\u5176\u72ec\u7279\u7684\u7c7b\u578b\uff0c\u8fd9\u662f\u7531\u7f16\u8bd1\u5668\u81ea\u52a8\u751f\u6210\u7684\u3002\u5373\u4f7f\u4e24\u4e2alambda\u8868\u8fbe\u5f0f\u770b\u8d77\u6765\u5b8c\u5168\u76f8\u540c\uff0c\u5b83\u4eec\u7684\u7c7b\u578b\u4e5f\u662f\u4e0d\u540c\u7684\u3002\u8fd9\u4e9b\u7c7b\u578b\u65e0\u6cd5\u76f4\u63a5\u5728\u4ee3\u7801\u4e2d\u8868\u793a\uff0c\u6211\u4eec\u662f\u501f\u52a9\u6a21\u677f\u548c\u7c7b\u578b\u63a8\u5bfc\u673a\u5236\u6765\u64cd\u4f5c\u548c\u63a8\u65ad\u5b83\u4eec\u3002<\/p>\n\n\n\n<p>\u83b7\u53d6\u4e00\u4e2alambda\u8868\u8fbe\u5f0f\u7684\u7c7b\u578b\u53ef\u4ee5\u4f7f\u7528decltype\u5173\u952e\u5b57\u3002\u4e0b\u9762\u4f8b\u5b50\u4e2d\uff0cdecltype(lambda)\u5f97\u5230\u7684\u662flambda\u8868\u8fbe\u5f0f\u7684\u786e\u5207\u7c7b\u578b\u3002\u8fd9\u6837\u5c31\u53ef\u4ee5\u58f0\u660e\u53e6\u4e00\u4e2a\u540c\u7c7b\u578b\u7684\u53d8\u91cfanother_lambda\uff0c\u5e76\u5c06\u539f\u59cblambda\u8d4b\u503c\u7ed9\u5b83\u3002\u8fd9\u79cd\u7279\u6027\u4e00\u822c\u5728\u6a21\u7248\u7f16\u7a0b\u4e2d\u53d1\u6325\u91cd\u8981\u4f5c\u7528\u3002<\/p>\n\n\n\n<p>\u770b\u4e0b\u9762\u53a8\u5e08\u505a\u83dc\u7684\u4f8b\u5b50\u3002\u4f60\u76ee\u524d\u4e0d\u77e5\u9053\u98df\u6750 ingredient \u7684\u7c7b\u578b\uff0c\u4f46\u662f\u53ef\u4ee5\u7528 decltype \u5f97\u5230\u98df\u6750\u7684\u7c7b\u578b\u3002\u8fd9\u4e2a\u7684\u5173\u952e\u70b9\u5c31\u662f\uff0c\u53ef\u4ee5\u660e\u786e\u5f97\u5230\u8fd4\u56de\u503c\u7684\u7c7b\u578b\uff0c\u5e76\u4e14\u4e3alambda\u6807\u8bb0\u8fd4\u56de\u7c7b\u578b\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>template &lt;typename T&gt;\nauto cookDish(T ingredient) -&gt; decltype(ingredient.prepare()) {\n    return ingredient.prepare();\n}<\/code><\/pre>\n\n\n\n<p>\u8fdb\u4e00\u6b65\u7684\uff0cdecltype \u5728 C++ \u4e2d\u7684\u4e00\u4e2a\u91cd\u8981\u7528\u9014\u662f\u5728<strong>\u7f16\u8bd1\u65f6<\/strong>\u6839\u636e\u4e0d\u540c\u7684\u7c7b\u578b\u9009\u62e9\u4e0d\u540c\u7684\u4ee3\u7801\u8def\u5f84\uff0c\u4e5f\u5c31\u662f<strong>\u6761\u4ef6\u7f16\u8bd1<\/strong>\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;type_traits&gt;\n\ntemplate &lt;typename T&gt;\nvoid process(T value) {\n    if constexpr (std::is_same&lt;decltype(value), int&gt;::value) {\n        std::cout &lt;&lt; \"\u5904\u7406\u6574\u6570: \" &lt;&lt; value &lt;&lt; std::endl;\n    } else if constexpr (std::is_same&lt;decltype(value), double&gt;::value) {\n        std::cout &lt;&lt; \"\u5904\u7406\u6d6e\u70b9\u6570: \" &lt;&lt; value &lt;&lt; std::endl;\n    } else {\n        std::cout &lt;&lt; \"\u5904\u7406\u5176\u4ed6\u7c7b\u578b: \" &lt;&lt; value &lt;&lt; std::endl;\n    }\n}<\/code><\/pre>\n\n\n\n<p>\u4e0b\u9762\u4f8b\u5b50\u662f\u5173\u4e8elambda\u7684\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;iostream&gt;\n#include &lt;type_traits&gt;\n\n\/\/ \u4e00\u4e2a\u6cdb\u578b\u51fd\u6570\uff0c\u6839\u636e\u4f20\u5165\u7684 lambda \u7c7b\u578b\u6267\u884c\u4e0d\u540c\u7684\u64cd\u4f5c\ntemplate &lt;typename T&gt;\nvoid executeLambda(T lambda) {\n    if constexpr (std::is_same&lt;decltype(lambda), void(*)()&gt;::value) {\n        std::cout &lt;&lt; \"Lambda is a void function with no parameters.\" &lt;&lt; std::endl;\n        lambda();\n    } else if constexpr (std::is_same&lt;decltype(lambda), void(*)(int)&gt;::value) {\n        std::cout &lt;&lt; \"Lambda is a void function taking an int.\" &lt;&lt; std::endl;\n        lambda(10);\n    } else {\n        std::cout &lt;&lt; \"Lambda is of an unknown type.\" &lt;&lt; std::endl;\n    }\n}\n\nint main() {\n    \/\/ Lambda with no parameters\n    auto lambda1 = &#91;]() { std::cout &lt;&lt; \"Hello from lambda1!\" &lt;&lt; std::endl; };\n\n    \/\/ Lambda with one int parameter\n    auto lambda2 = &#91;](int x) { std::cout &lt;&lt; \"Hello from lambda2, x = \" &lt;&lt; x &lt;&lt; std::endl; };\n\n    executeLambda(lambda1);\n    executeLambda(lambda2);\n\n    return 0;\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3. Lambda\u5728\u65b0\u6807\u51c6\u4e2d\u7684\u8fdb\u5316<\/h3>\n\n\n\n<p><strong>C++11<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u5f15\u5165Lambda\u8868\u8fbe\u5f0f<\/strong>: C++11\u6807\u51c6\u9996\u6b21\u5f15\u5165\u4e86Lambda\u8868\u8fbe\u5f0f\uff0c\u53ef\u4ee5\u4fbf\u6377\u5730\u5b9a\u4e49\u533f\u540d\u51fd\u6570\u5bf9\u8c61\u3002\u57fa\u672c\u5f62\u5f0f\u662f <a href=\"parameters\">capture<\/a> -> return_type { body }\u3002<\/li>\n\n\n\n<li><strong>\u6355\u83b7\u5217\u8868<\/strong>: \u652f\u6301\u901a\u8fc7\u503c\uff08=\uff09\u6216\u5f15\u7528\uff08&amp;\uff09\u6355\u83b7\u5916\u90e8\u53d8\u91cf\u3002<\/li>\n<\/ul>\n\n\n\n<p><strong>C++14<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u6cdb\u578bLambda<\/strong>: \u5141\u8bb8\u5728\u53c2\u6570\u5217\u8868\u4e2d\u4f7f\u7528auto\u5173\u952e\u5b57\uff0c\u4f7fLambda\u53ef\u4ee5\u50cf\u6a21\u677f\u51fd\u6570\u4e00\u6837\u5de5\u4f5c\u3002<\/li>\n\n\n\n<li><strong>\u6355\u83b7\u521d\u59cb\u5316<\/strong>: \u5141\u8bb8\u5728\u6355\u83b7\u5217\u8868\u4e2d\u4f7f\u7528\u521d\u59cb\u5316\u8868\u8fbe\u5f0f\uff0c\u521b\u5efaLambda\u4e13\u6709\u7684\u6570\u636e\u6210\u5458\u3002<\/li>\n<\/ul>\n\n\n\n<p><strong>C++17<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u9ed8\u8ba4\u6784\u9020\u548c\u8d4b\u503c<\/strong>: Lambda\u8868\u8fbe\u5f0f\u4ea7\u751f\u7684\u95ed\u5305\u7c7b\u578b\u5728\u67d0\u4e9b\u6761\u4ef6\u4e0b\u53ef\u4ee5\u662f\u9ed8\u8ba4\u6784\u9020\u7684\u548c\u53ef\u8d4b\u503c\u7684\u3002<\/li>\n\n\n\n<li><strong>\u6355\u83b7*this\u6307\u9488<\/strong>: \u901a\u8fc7*this\u6355\u83b7\uff0c\u53ef\u4ee5\u503c\u62f7\u8d1d\u5f53\u524d\u5bf9\u8c61\u5230Lambda\u4e2d\uff0c\u907f\u514d\u60ac\u6302\u6307\u9488\u95ee\u9898\u3002<\/li>\n\n\n\n<li><strong>constexpr Lambda<\/strong>: constexpr Lambda\u53ef\u4ee5\u7528\u4e8e\u5728\u7f16\u8bd1\u65f6\u8fdb\u884c\u8ba1\u7b97\u3002\u5728\u6a21\u677f\u5143\u7f16\u7a0b\u3001\u7f16\u8bd1\u65f6\u6570\u636e\u751f\u6210\u7b49\u573a\u666f\u7279\u522b\u6709\u7528\u3002<\/li>\n<\/ul>\n\n\n\n<p><strong>C++20<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u6a21\u677fLambda<\/strong>: Lambda\u8868\u8fbe\u5f0f\u53ef\u4ee5\u6709\u6a21\u677f\u53c2\u6570\u5217\u8868\uff0c\u7c7b\u4f3c\u4e8e\u6a21\u677f\u51fd\u6570\u3002<\/li>\n\n\n\n<li><strong>\u66f4\u7075\u6d3b\u7684\u6355\u83b7\u5217\u8868<\/strong>: \u5141\u8bb8\u4f7f\u7528[=, this]\u548c[&amp;, this]\u5f62\u5f0f\u7684\u6355\u83b7\u5217\u8868\u3002<\/li>\n\n\n\n<li><strong>\u9690\u5f0f\u79fb\u52a8\u6355\u83b7<\/strong>: \u5728\u9002\u5f53\u7684\u60c5\u51b5\u4e0b\uff0c\u81ea\u52a8\u91c7\u7528\u79fb\u52a8\u6355\u83b7\uff08C++14\u4e2d\u4ec5\u652f\u6301\u62f7\u8d1d\u548c\u5f15\u7528\u6355\u83b7\uff09\u3002<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">4. \u72b6\u6001\u4fdd\u6301\u7684Lambda<\/h3>\n\n\n\n<p>\u4e0b\u9762\u4f8b\u5b50\uff0c\u503c\u3001\u5f15\u7528\u6355\u83b7\u53d8\u91cf x \u5c31\u662f\u8ba9Lambda\u4fdd\u6301\u72b6\u6001\u7684\u5173\u952e\u3002\u8fd8\u53ef\u4ee5\u6355\u83b7\u5e76\u4fdd\u6301\u81ea\u5df1\u7684\u72b6\u6001\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;iostream&gt;\n\nint main() {\n    int x0 = 10, x1 = 20, count = 0;\n    auto addX = &#91;x0, &amp;x1, count](int y) mutable {\n        count++;\n        return x0 + x1 + y + count;\n    };\n\n    std::cout &lt;&lt; addX(5) &lt;&lt; std::endl;  \/\/ \u8f93\u51fa 36\n    std::cout &lt;&lt; addX(5) &lt;&lt; std::endl;  \/\/ \u8f93\u51fa 37\n    std::cout &lt;&lt; addX(5) &lt;&lt; std::endl;  \/\/ \u8f93\u51fa 38\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">5. \u4f18\u5316\u4e0eLambda<\/h3>\n\n\n\n<p>Lambda\u4e3a\u4ec0\u4e48\u597d\uff1f<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5167\u8054\u4f18\u5316\uff1aLambda\u4e00\u822c\u6bd4\u8f83\u77ed\u5c0f\uff0c\u5167\u8054\u4f18\u5316\u51cf\u5c11\u51fd\u6570\u8c03\u7528\u5f00\u9500\u3002<\/li>\n\n\n\n<li>\u907f\u514d\u975e\u5fc5\u8981\u7684\u5bf9\u8c61\u521b\u5efa\uff1a\u5f15\u7528\u6355\u83b7\u3001\u79fb\u52a8\u8bed\u4e49\u53ef\u4ee5\u51cf\u5c11\u5927\u578b\u5bf9\u8c61\u8f6c\u79fb\u7684\u5f00\u9500\u3001\u590d\u5236\u3002<\/li>\n\n\n\n<li>\u5ef6\u8fdf\u8ba1\u7b97\uff1a\u5728\u771f\u6b63\u9700\u8981\u7ed3\u679c\u65f6\u624d\u6267\u884c\u8ba1\u7b97\u3002<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">6. \u4e0e\u5176\u4ed6\u7f16\u7a0b\u8303\u5f0f\u7684\u7ed3\u5408<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\u51fd\u6570\u5f0f\u7f16\u7a0b<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>class StringBuilder {\nprivate:\n    std::string str;\n\npublic:\n    StringBuilder&amp; append(const std::string&amp; text) {\n        str += text;\n        return *this;\n    }\n\n    const std::string&amp; toString() const {\n        return str;\n    }\n};\n\n\/\/ \u4f7f\u7528\nStringBuilder builder;\nbuilder.append(\"Hello, \").append(\"world! \");\nstd::cout &lt;&lt; builder.toString() &lt;&lt; std::endl;  \/\/ \u8f93\u51fa \"Hello, world! \"<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u6d41\u6c34\u7ebf\u8c03\u7528<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;ranges&gt;\n#include &lt;vector&gt;\n#include &lt;iostream&gt;\n\nint main() {\n    std::vector&lt;int&gt; vec = {1, 2, 3, 4, 5};\n\n    auto pipeline = vec \n                    | std::views::transform(&#91;](int x) { return x * 2; })\n                    | std::views::filter(&#91;](int x) { return x &gt; 5; });\n\n    for (int n : pipeline) std::cout &lt;&lt; n &lt;&lt; \" \"; \/\/ \u8f93\u51fa\u6ee1\u8db3\u6761\u4ef6\u7684\u5143\u7d20\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">7. Lambda\u4e0e\u5f02\u5e38\u5904\u7406<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>auto divide = &#91;](double numerator, double denominator) {\n    if (denominator == 0) {\n        throw std::runtime_error(\"Division by zero.\");\n    }\n    return numerator \/ denominator;\n};\n\ntry {\n    auto result = divide(10.0, 0.0);\n} catch (const std::runtime_error&amp; e) {\n    std::cerr &lt;&lt; \"Caught exception: \" &lt;&lt; e.what() &lt;&lt; std::endl;\n}<\/code><\/pre>\n\n\n\n<p>\u867d\u7136Lambda\u8868\u8fbe\u5f0f\u672c\u8eab\u4e0d\u80fd\u5305\u542btry-catch\u5757\uff08\u5728C++20\u4e4b\u524d\uff09\uff0c\u4f46\u53ef\u4ee5\u5728Lambda\u8868\u8fbe\u5f0f\u7684\u5916\u90e8\u8fdb\u884c\u5f02\u5e38\u6355\u83b7\u3002\u5373\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>auto riskyTask = &#91;]() {\n    \/\/ \u5047\u8bbe\u8fd9\u91cc\u6709\u53ef\u80fd\u629b\u51fa\u5f02\u5e38\u7684\u4ee3\u7801\n};\n\ntry {\n    riskyTask();\n} catch (...) {\n    \/\/ \u5904\u7406\u5f02\u5e38\n}<\/code><\/pre>\n\n\n\n<p>\u4eceC++20\u5f00\u59cb\uff0cLambda\u8868\u8fbe\u5f0f\u652f\u6301\u5f02\u5e38\u89c4\u8303\u3002<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u5728 C++17 \u4e4b\u524d\uff0c\u53ef\u4ee5\u5728\u51fd\u6570\u58f0\u660e\u4e2d\u4f7f\u7528\u52a8\u6001\u5f02\u5e38\u89c4\u8303\uff0c\u4f8b\u5982 throw(Type)\uff0c\u6765\u6307\u5b9a\u51fd\u6570\u53ef\u80fd\u629b\u51fa\u7684\u5f02\u5e38\u7c7b\u578b\u3002\u4f46\u662f\uff0c\u8fd9\u79cd\u505a\u6cd5\u5728 C++17 \u4e2d\u88ab\u5e9f\u5f03\uff0c\u5e76\u5728 C++20 \u4e2d\u5b8c\u5168\u79fb\u9664\u3002\u53d6\u800c\u4ee3\u4e4b\u7684\u662f noexcept \u5173\u952e\u5b57\uff0c\u5b83\u7528\u6765\u6307\u793a\u4e00\u4e2a\u51fd\u6570\u662f\u5426\u4f1a\u629b\u51fa\u5f02\u5e38\u3002<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>auto lambdaNoExcept = &#91;]() noexcept {\n    \/\/ \u8fd9\u91cc\u4fdd\u8bc1\u4e0d\u4f1a\u629b\u51fa\u4efb\u4f55\u5f02\u5e38\n};<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u8fdb\u9636\u7bc7<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1. Lambda\u4e0enoexcept \uff08C++11\uff09<\/h3>\n\n\n\n<p>noexcept \u53ef\u7528\u4e8e\u6307\u660eLambda\u8868\u8fbe\u5f0f\u662f\u5426\u4fdd\u8bc1\u4e0d\u629b\u51fa\u5f02\u5e38\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>auto lambda = &#91;]() noexcept {\n    \/\/ \u8fd9\u91cc\u7684\u4ee3\u7801\u4fdd\u8bc1\u4e0d\u629b\u51fa\u5f02\u5e38\n};<\/code><\/pre>\n\n\n\n<p>\u5f53\u7f16\u8bd1\u5668\u77e5\u9053\u4e00\u4e2a\u51fd\u6570\u4e0d\u4f1a\u629b\u51fa\u5f02\u5e38\u65f6\uff0c\u5b83\u53ef\u4ee5\u751f\u6210\u66f4\u4f18\u5316\u7684\u4ee3\u7801\u3002<\/p>\n\n\n\n<p>\u4e5f\u53ef\u4ee5\u663e\u5f0f\u7684\u629b\u51fa\u5f02\u5e38\uff0c\u63d0\u9ad8\u4ee3\u7801\u53ef\u8bfb\u6027\u3002\u4f46\u662f\u548c\u4e0d\u5199\u662f\u4e00\u6837\u7684\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>auto lambdaWithException = &#91;]() noexcept(false) {\n    \/\/ \u8fd9\u91cc\u7684\u4ee3\u7801\u53ef\u80fd\u4f1a\u629b\u51fa\u5f02\u5e38\n};<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2. Lambda\u4e2d\u7684\u6a21\u677f\u53c2\u6570\uff08C++20\uff09<\/h3>\n\n\n\n<p>\u5728C++20\u4e2d\uff0cLambda\u8868\u8fbe\u5f0f\u5f97\u5230\u4e86\u4e00\u4e2a\u91cd\u8981\u7684\u589e\u5f3a\uff0c\u5373\u652f\u6301\u6a21\u677f\u53c2\u6570\uff0c\u592a\u9177\u5566\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>auto lambda = &#91;]&lt;typename T&gt;(T param) {\n    \/\/ \u4f7f\u7528\u6a21\u677f\u53c2\u6570T\u7684\u4ee3\u7801\n};\nauto print = &#91;]&lt;typename T&gt;(const T&amp; value) {\n    std::cout &lt;&lt; value &lt;&lt; std::endl;\n};\n\nprint(10);        \/\/ \u6253\u5370\u4e00\u4e2a\u6574\u6570\nprint(\"Hello\");   \/\/ \u6253\u5370\u4e00\u4e2a\u5b57\u7b26\u4e32<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3. Lambda\u7684\u53cd\u5c04<\/h3>\n\n\n\n<p>\u4e0d\u77e5\u9053\uff0c\u665a\u70b9\u518d\u5199\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4. \u8de8\u5e73\u53f0\u548cABI\u7684\u95ee\u9898<\/h3>\n\n\n\n<p>\u4e0d\u77e5\u9053\uff0c\u665a\u70b9\u518d\u5199\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6211\u4e5f\u662f\u83dc\u9e21QAQ\uff0c\u6d45\u6d45\u5206\u4eab\u4e00\u4e0b\u5b66\u4e60C++Lambda\u7684\u7b14\u8bb0\u3002\u501f\u6b64\u7ba1\u4e2d\u7aa5\u8c79\uff0c\u5b9b\u5982\u900f\u8fc7\u72ed\u7f1d\u7aa5\u63a2\u77e5\u4e4e\u5927\u4f6c\u4eec\u9068\u6e38\u4e8e\u667a\u6167 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":65,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[53],"tags":[],"class_list":["post-1401","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tech"],"_links":{"self":[{"href":"https:\/\/remoooo.com\/en\/wp-json\/wp\/v2\/posts\/1401","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/remoooo.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/remoooo.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/remoooo.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/remoooo.com\/en\/wp-json\/wp\/v2\/comments?post=1401"}],"version-history":[{"count":1,"href":"https:\/\/remoooo.com\/en\/wp-json\/wp\/v2\/posts\/1401\/revisions"}],"predecessor-version":[{"id":1402,"href":"https:\/\/remoooo.com\/en\/wp-json\/wp\/v2\/posts\/1401\/revisions\/1402"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/remoooo.com\/en\/wp-json\/wp\/v2\/media\/65"}],"wp:attachment":[{"href":"https:\/\/remoooo.com\/en\/wp-json\/wp\/v2\/media?parent=1401"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/remoooo.com\/en\/wp-json\/wp\/v2\/categories?post=1401"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/remoooo.com\/en\/wp-json\/wp\/v2\/tags?post=1401"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}