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; templatevoid operator()(A a, B b) { cout 在此範例中,a 和 b 的類型是在執行時呼叫 f 時推導出來的。 lambda 不具備這種靈活性。
效率
一般來說,當按值使用捕獲的變數時,lambda 往往比綁定更有效率。這是因為 lambda 直接捕獲變量,而 bind 創建一個引用捕獲變量的閉包物件。然而,當捕獲的變數較大或函數呼叫頻繁時,bind 可能會具有優勢。
結論
lambda 和 bind 之間的選擇取決於特定需求的應用程式。 Lambda 提供多態性,並且可以有效地擷取小型值類型變數。 Bind 提供了更大的靈活性,在處理大型或頻繁調用的函數時可能更可取。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3