為什麼std::function 不相等可比較
在C 中,std::function 是一個通用的可調用包裝器,允許您工作具有任意函數物件。儘管 std::function 很實用,但它不支援相等比較 (==)。 Boost::function 和 std::tr1::function 表現出相同的行為。
歷史背景
在 C 11 標準的早期草案中,std::function確實有相等運算符的重載。然而,這些重載後來被聲明為刪除,其理由是關閉「類型系統中可能存在的漏洞」。
「漏洞」
「漏洞」 C 11 草案中提到的「涉及隱式布林轉換可能導致意外的相等比較。在C 03 中,引入了safe-bool 習慣用法來避免此問題,而在C 11 中,引入了顯式bool 轉換函數。 ::function 的特定注意事項
與std::shared_ptr 不同,它具有良好的-定義的相等語義(相等意味著指向同一個對象),std::function 沒有明確的相等概念。函數將比較為不相等。
編寫通用的相等性檢查程式碼。性增加。潛在的類型系統漏洞並確保不同實現之間函數行為的一致性。以上是為什麼不能比較 `std::function` 物件是否相等?的詳細內容。更多資訊請關注PHP中文網其他相關文章!