首頁 >後端開發 >C++ >為什麼不能比較 `std::function` 物件是否相等?

為什麼不能比較 `std::function` 物件是否相等?

Susan Sarandon
Susan Sarandon原創
2024-10-30 10:41:02294瀏覽

Why Can't You Compare `std::function` Objects for Equality?

為什麼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中文網其他相關文章!

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