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