为什么 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 转换函数。然而,这些措施并不能完全消除意外相等比较的可能性。
std::function 的具体注意事项
与 std::shared_ptr 不同,它具有良好的 -定义的相等语义(相等意味着指向同一个对象),std::function 没有明确的相等概念。请考虑以下情况:
不可比较的后果
无法比较 std::function 对象是否相等会产生一定的后果:
结论
虽然 std::function 缺乏相等性比较在某些情况下可能会带来不便,但它最终可以防止潜在的类型系统漏洞并确保不同实现之间函数行为的一致性。对于需要相等比较的应用程序,可以采用替代解决方案,例如使用具有显式相等覆盖的包装类。
以上是为什么不能比较 `std::function` 对象是否相等?的详细内容。更多信息请关注PHP中文网其他相关文章!