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

std::function 與函式指標:什麼時候該選擇什麼?

Linda Hamilton
發布: 2024-11-11 19:22:03
原創
437 人瀏覽過

std::function vs. Function Pointers: When Should You Choose What?

使用std::function,除非有令人信服的理由不使用

在C 中使用回呼函數時,可以選擇使用C 風格的函數指標和較新的std::function 可能是一個有爭議的問題。讓我們來看看每個選項的優缺點。

C 風格函數指標:

  • 優點:呼叫時沒有開銷功能。
  • 缺點:無法捕捉上下文變量,限制其用例。

std::function:

  • 優點:可以捕捉上下文變量,使其更通用。
  • 缺點:呼叫函數時會引入少量開銷。

何時使用 std::function:

在大多數情況下,std::function 是首選。它比函數指標更靈活且面向未來。除非有特定的效能問題,否則通常建議使用 std::function 來傳遞回呼。

何時使用函數指標:

如果效能至關重要考慮到回調函數不需要擷取任何上下文變量,那麼函數指標可能是更好的選擇。不過這種情況比較少見。

第三個選項:模板參數

如果您希望回調函數是任何可呼叫對象,請考慮使用模板參數。這種方法提供了靈活性,但需要在標頭中實作外部函數。

總表:

Feature Function Pointer std::function Template Parameter
Can capture context No Yes Yes
Call overhead None Small None
Can be inlined No No Yes
Can be stored in class member Yes Yes No
Implemented outside of header Yes Yes No
Supported without C 11 standard Yes No Yes
Readability Poor Good Fair

結論:

總的來說,std::function 的優點超過了函數指標。它更加靈活、面向未來且可讀。僅當存在特定效能問題或回調函數不需要捕獲任何上下文變數時才使用函數指標。

以上是std::function 與函式指標:什麼時候該選擇什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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