<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                “Lambda 表達式”(lambda expression)是一個匿名函數,`Lambda`表達式基于數學中的λ演算得名,直接對應于其中的lambda抽象(lambda abstraction),是一個匿名函數,即沒有函數名的函數。 我第一次接觸`Lambda`表達式是在C#中,后來才知道C++11引入了`Lambda`表達式。 SO C++ 11 標準的一大亮點是引入`Lambda`表達式。基本語法如下:? **[capture list] (parameter list) ->return type { function body }** [] // 沒有定義任何變數。使用未定義變數會導致錯誤。? [x, &y] // x 以傳值方式傳入(預設),y 以傳參考方式傳入。? [&] // 任何被使用到的外部變數皆隱式地以參考方式加以引用。? [=] // 任何被使用到的外部變數皆隱式地以傳值方式加以引用。? [&, x] // x 顯示地以傳值方式加以引用。其餘變數以參考方式加以引用。? [=, &z] // z 顯示地以參考方式加以引用。其餘變數以傳值方式加以引用。 ~~~ class CTest { public: CTest() : m_nData(20) { NULL; } void TestLambda() { vector<int> vctTemp; vctTemp.push_back(1); vctTemp.push_back(2); // 無函數對象參數,輸出:1 2 { for_each(vctTemp.begin(), vctTemp.end(), [](int v){ cout << v << endl; }); } // 以值方式傳遞作用域內所有可見的局部變量(包括this),輸出:11 12 { int a = 10; for_each(vctTemp.begin(), vctTemp.end(), [=](int v){ cout << v+a << endl; }); } // 以引用方式傳遞作用域內所有可見的局部變量(包括this),輸出:11 13 12 { int a = 10; for_each(vctTemp.begin(), vctTemp.end(), [&](int v)mutable{ cout << v+a << endl; a++; }); cout << a << endl; } // 以值方式傳遞局部變量a,輸出:11 13 10 { int a = 10; for_each(vctTemp.begin(), vctTemp.end(), [a](int v)mutable{ cout << v+a << endl; a++; }); cout << a << endl; } // 以引用方式傳遞局部變量a,輸出:11 13 12 { int a = 10; for_each(vctTemp.begin(), vctTemp.end(), [&a](int v){ cout << v+a << endl; a++; }); cout << a << endl; } // 傳遞this,輸出:21 22 { for_each(vctTemp.begin(), vctTemp.end(), [this](int v){ cout << v+m_nData << endl; }); } // 除b按引用傳遞外,其他均按值傳遞,輸出:11 12 17 { int a = 10; int b = 15; for_each(vctTemp.begin(), vctTemp.end(), [=, &b](int v){ cout << v+a << endl; b++; }); cout << b << endl; } // 操作符重載函數參數按引用傳遞,輸出:2 3 { for_each(vctTemp.begin(), vctTemp.end(), [](int &v){ v++; }); for_each(vctTemp.begin(), vctTemp.end(), [](int v){ cout << v << endl; }); } // 空的Lambda表達式 { [](){}(); []{}(); } } private: int m_nData; }; ~~~ 其中除了“[ ]”(其中捕獲列表可以為空)和“復合語句”(相當于具名函數定義的函數體),其它都是可選的。 C++中,一個`lambda`表達式表示一個可調用的代碼單元。我們可以將其理解為一個未命名的內聯函數。它與普通函數不同的是,`lambda`必須使用尾置返回來指定返回類型。 你可能會問,除了那些表達式愛好者,誰會用`lambda`表達式呢?? 1、距離? 程序員認為,讓定義位于使用的地方附近很有用,因此這樣無需翻閱多頁的源代碼。從這個角度看,`Lambda`表達式是理想的選擇,因為定義和使用是在同一個地方。? 2、簡潔? 函數符代碼比函數和`Lambda`表達式更加繁瑣,函數和`Lambda`表達式的簡潔程度相當。但是不同于函數的是,`Lambda`可以定義于函數內部。? 3、`lambda`可訪問作用域內的任何動態變量。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看