【发布时间】:2016-01-31 12:24:07
【问题描述】:
我不止一次看到std::function 的operator== 被滥用,我不得不解释它的真正用途。
为了有利于未来的读者清楚起见,here 是文档。
上面提到的文档说:
将 std::function 与空指针进行比较。空函数(即没有可调用目标的函数)比较相等,非空函数比较不相等。
也就是说,std::function 也有 operator bool()(here 是文档),其行为方式几乎相同,可以用来代替比较 my_func == nullptr。
特别是据说:
检查 *this 是否存储可调用函数目标,即不为空。
我看不到一个可以使用而另一个不合适的情况,所以我无法理解operator== 的目的是什么,除了它可能会被误解和误用的大部分次。
是否存在无法使用的特殊情况?
它们是否可以互换,因为它们实际上是相同的东西,还是有两个不同的运算符有意义?
【问题讨论】:
-
T* m,然后是m==nullptr和if(m)以使std::function的行为类似于本机指针 -
但是
m==n的行为不像原生指针... -
@KarolyHorvath 我不确定比较函数指针是否有意义
-
@AngelusMortis:确实如此。假设你有一堆(例如:插件)并且你想删除一个条目......
-
这正是我认为它违反直觉的原因,它仅适用于
nullptr和std::functions,而我希望operator==能提供更多。我想这也是它通常被错误使用的原因......
标签: c++ c++11 operators comparison-operators nullptr