为什么 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中文网其他相关文章!