我看到operator==
的{{1}}被误用了不止一次,我不得不解释它的实际用途。
为了清楚有利于未来的读者,here是文档
上面提到的文档说它:
将std :: function与空指针进行比较。空函数(即没有可调用目标的函数)比较相等的非空函数比较不相等。
也就是说,std::function
还有std::function
(here是文档),其行为方式几乎相同,可用于代替比较operator bool()
。
特别是据说:
检查*这是否存储可调用的函数目标,即不为空。
我看不出一个可以使用而另一个不适合的情况,所以我无法理解my_func == nullptr
的目的是什么,除了它可能被误解和滥用最多的事实时代。
是否存在不能使用的特定情况? 它们是否可以互换,因为它们实际上是相同的东西,或者有两个不同的运算符是有意义的吗?
答案 0 :(得分:2)
目的很简单:
尽可能合理地模拟普通函数指针的接口。
不可否认,我认为他们有点过分......即使是在模板中使用。
仅允许与nullptr
进行比较的理由反映了original reason完全保留比较:
IIIb族。缺乏比较运算符
函数对象包装器不支持比较运算符==,!=,<,>,< =和> =。
基本原理:(in)无法为函数对象明确定义相等和排序关系。
原因很简单:包装的目标可能不支持比较,可能包装不同,或者其他什么。
如果你确定算子包装的目标是什么,有一种方法可以得到原始论点:
但是你需要非常了解可能包含哪些内容才能使用它。