长根 發表於 2025-10-18 21:37:00

C++lambda表达式简单笔记

<h1 id="lambda表达式语法">lambda表达式语法</h1>
<p> </p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

int main(int argc, char* argv[])
{
        /**
        * 1. 基本形式与语法
        */

        //如果没有传入参数,参数列表可以省略
        auto lambda1 = []() { std::cout &lt;&lt; "Hello, World !" &lt;&lt; std::endl; };
        auto lambda2 = [](int x, int y) -&gt; int //返回参数可使用尾置返回语法
                {
                        if (x &gt; y)
                                return 1;
                        else if (x &lt; y)
                                return -1;
                        else
                                return 0;
                };

        /**
        * 输出:
        * Hello, World !
        */
        lambda1();
        /**
        * 输出:
        * -1
        */
        std::cout &lt;&lt; lambda2(1, 2) &lt;&lt; std::endl;
        /**
        * 输出:
        * 1
        */
        std::cout &lt;&lt; lambda2(2, 1) &lt;&lt; std::endl;
        /**
        * 输出:
        * 0
        */
        std::cout &lt;&lt; lambda2(1, 1) &lt;&lt; std::endl;

        return 0;
}
</code></pre>
<p> </p>
<h2 id="捕获">捕获</h2>
<pre><code class="language-C++">#include &lt;iostream&gt;
#include &lt;algorithm&gt;
#include &lt;vector&gt;
#include &lt;string&gt;

int main(int argc, char* argv[])
{
        /**
        * lambda表达式捕获外部变量示例
        */

        std::vector&lt;int&gt; vec{ 1,2,3,4,5,6,7,8,9,10 };
        std::string str;

        //&amp;str为引用捕获,在函数内部可以被修改
        std::for_each(vec.begin(), vec.end(), [&amp;str](int n) {
                str.append(std::to_string(n)).append(",");
                });
        str.pop_back();

        /**
        * 输出:
        * 1,2,3,4,5,6,7,8,9,10
        */
        std::cout &lt;&lt; str &lt;&lt; std::endl;

        //argc为值捕获(拷贝),该变量在函数内部修改后不会影响外部变量
        std::for_each(argv, argv + argc, (char* args) {
                /**
                * 输出命令行参数
                */
                std::cout &lt;&lt; args &lt;&lt; std::endl;
        });

        /**
        * 关于其他捕获语法:
        * [=]: 所有外部变量的捕获均为值捕获(拷贝)
        * [&amp;]: 所有外部变量的捕获均为引用捕获
        * [=, var...]: var以引用捕获,其他外部变量以值捕获
        * [&amp;, var...]: var以值捕获,其他外部变量以引用捕获
        */

        return 0;
}
</code></pre>
<p> </p>
<h1 id="其他">其他</h1>
<p> </p>
<p>当lambda表达式不使用<code>[]</code>捕获时,其表现与函数指针相同;如果使用了<code>[]</code>捕获,则会变成带有成员变量(引用或拷贝)和重载<code>operator()</code>函数运算符的类,所以将lambda表达式代入参数为函数指针的函数时,不能使用<code>[]</code>捕获。</p>


</div>
<div id="MySignature" role="contentinfo">
    <p>本文来自博客园,作者:Reimual,转载请注明原文链接:https://www.cnblogs.com/Reimual/p/19150187</p><br><br>
来源:https://www.cnblogs.com/Reimual/p/19150187
頁: [1]
查看完整版本: C++lambda表达式简单笔记