為什麼 std::function 不具有相等可比性?
儘管 std::function 被廣泛使用,但它不具有相等可比性。此限制也適用於 boost::function 和 std::tr1::function,其根源在於語言設計考量。
最初刪除的運算子
在早期的C 11 草案中,std::function 的等式運算子被聲明為已刪除,並帶有註釋「刪除的重載會關閉類型系統中可能存在的漏洞」。這個模糊的陳述讓我們想知道這個「漏洞」的本質。
類布林轉換「漏洞」
根據TR1 規範,未聲明的相等性std::function 的運算子旨在彌補由類布林轉換造成的漏洞。這些轉換允許透過 == 和 != 來比較函數實例。
std::shared_ptr 異常
與 std::function 不同,std::shared_ptr 有明確定義的平等語意。如果兩個指針都為空或都非空並且指向同一個對象,則認為它們相等。這是因為 std::shared_ptr 的作用更加簡單,並且可以輕鬆定義其相等語意。
複雜性和等價性
對std::function 實現相等比較將要求所有可調用類型都是可相等比較的,但這並不總是可行的。此外,測試函數的等價性可能具有挑戰性,特別是當它們具有不同的參數綁定時。
結論
雖然std::function 提供了一種方便的方法來處理各種可調用類型,其缺乏相等可比性是一個有意的設計選擇。避免潛在的漏洞並適應可調用類型的多樣性是此決定背後的主要考慮因素。
以上是為什麼 std::function 不具有相等性可比性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!