首頁  >  文章  >  後端開發  >  為什麼 `std::function`、`boost::function` 和 `std::tr1::function` 不相等?

為什麼 `std::function`、`boost::function` 和 `std::tr1::function` 不相等?

Linda Hamilton
Linda Hamilton原創
2024-11-01 19:26:02112瀏覽

Why are `std::function`, `boost::function`, and `std::tr1::function` not Equality Comparable?

為什麼std::function 不相等可比較

初始問題:

為什麼std::function (也適用於boost::function 和std::tr1::function) 不相等可比較?

答案:

不可比較的原因:

std::function 旨在容納各種可調用型別。對所有可調用類型強加相等比較對於實現者來說是很麻煩的。此外,即使實現,相等性檢查也可能會很狹窄,無法考慮以不同方式建構的等效函數。

「類型系統中可能的漏洞」解釋:

刪除重載的== 和!= 運算子完全阻止了它們的使用,確保任何隱式比較函數的嘗試都會導致編譯時發生錯誤。這種方法消除了意外或有問題的隱式轉換的可能性。

與 std::shared_ptr:

與 std::function 不同,std::shared_ptr 具有良好的 -定義了平等語義。如果兩個shared_ptr實例都為空或它們都非空並且引用同一個對象,則它們被認為是相等的。

以上是為什麼 `std::function`、`boost::function` 和 `std::tr1::function` 不相等?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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