首頁  >  文章  >  後端開發  >  C 中的 Lambda 與 Bind:什麼時候該選擇每個?

C 中的 Lambda 與 Bind:什麼時候該選擇每個?

Susan Sarandon
Susan Sarandon原創
2024-11-01 02:49:28705瀏覽

Lambdas vs. Bind in C  : When Should You Choose Each?

C 中的Lambda 與Bind:多態性與效率

在類似任務中比較C 0x lambda 和std::bind 的用法時,兩者之間的選擇可能會受到多態性和效率等因素的影響。

Bind 與 Lambda 詳細資訊

考慮以下範例,其中 lambda 和bind用於使用分佈和引擎產生隨機數:

// Using lambda
auto dice = [&]() { return distribution(engine); };

// Using bind
auto dice = bind(distribution, engine);

多態

與單態(即具有固定類型)的lambda 不同,std: : bind 允許多態行為。這表示 Bind 可用於建立未知類型的函數,如下所示:

struct foo {
  typedef void result_type;

  template <typename A, typename B>
  void operator()(A a, B b) {
    cout << a << ' ' << b;
  }
};

auto f = bind(foo(), _1, _2);
f("test", 1.2f); // will print "test 1.2"

在此範例中,a 和 b 的類型是在呼叫 f 時在執行時推導出來的。 lambda 不具備這種靈活性。

效率

一般來說,當按值使用捕獲的變數時,lambda 往往比綁定更有效率。這是因為 lambda 直接捕獲變量,而 bind 創建一個引用捕獲變量的閉包物件。然而,當捕獲的變數較大或函數被頻繁呼叫時,bind 可能會具有優勢。

結論

lambda 和 bind 之間的選擇取決於具體需求的應用程式。 Lambda 提供多態性,並且可以有效地擷取小型值類型變數。 Bind 提供了更大的靈活性,在處理大型或頻繁調用的函數時可能更可取。

以上是C 中的 Lambda 與 Bind:什麼時候該選擇每個?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn