首頁 > 後端開發 > C++ > 主體

何時選擇:std::bind 與 C 0x 中的 Lambda?

Mary-Kate Olsen
發布: 2024-10-30 15:21:12
原創
1023 人瀏覽過

When to Choose: std::bind vs. Lambdas in C  0x?

比較和對比:C 0x 中的std::bind 和Lambda

在C 0x 中,程式設計師面臨兩種選擇來捕獲函數:std::bind 和lambda。雖然兩者都有不同的用途,但它們在某些應用中存在重疊。讓我們以交叉功能為例,深入研究每種方法的優點和限制。

考慮建立擲骰子函數的任務。使用lambda,我們可以將其表示為:

<code class="cpp">auto dice = [&]() { return distribution(engine); };</code>
登入後複製

或者,使用std::bind,我們可以寫:

<code class="cpp">auto dice = bind(distribution, engine);</code>
登入後複製

單態與多態性

一個根本的差別在於它們的型別行為。 Lambda 是單態的,這表示它們具有在編譯時確定的固定參數類型。與綁定對應項相比,此限制限制了 lambda 的靈活性。

例如,考慮一個列印兩個參數的函數:

<code class="cpp">auto f = [](auto a, auto b) { cout << a << ' ' << b; }
登入後複製

將此 lambda 與不同的參數類型一起使用將導致編譯器錯誤。相反,std::bind 允許多態行為,使函數能夠綁定到不同類型的參數:

<code class="cpp">struct foo {
  template <typename A, typename B>
  void operator()(A a, B b) {
    cout << a << ' ' << b;
  }
};

auto f = bind(foo(), _1, _2);</code>
登入後複製

透過將類型推導推遲到函數被調用,std::bind 提供了更大的靈活性用於處理不同的輸入類型。

以上是何時選擇:std::bind 與 C 0x 中的 Lambda?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板