gpt4 book ai didi

c++ - std::function 的 operator== 的真正目的是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:08:35 25 4
gpt4 key购买 nike

我不止一次看到 std::functionoperator== 被误用,我不得不解释它的真正用途是什么。
为了有利于 future 读者的清晰起见,here是文档。
上面提到的文档说:

Compares a std::function with a null pointer. Empty functions (that is, functions without a callable target) compare equal, non-empty functions compare non-equal.

也就是说,std::function 也有 operator bool()(here 是文档),其行为方式几乎相同并且可以使用代替比较 my_func == nullptr
特别是,据说它:

Checks whether *this stores a callable function target, i.e. is not empty.

我看不到一个可以使用而另一个不适合的情况,所以我无法理解 operator== 的目的是什么,除了它可以大多数时候被误解和误用。

有没有什么特殊情况不能用?
它们是否可以互换,因为它们实际上是同一事物,还是有两个不同的运算符才有意义?

最佳答案

目的很简单:

尽可能合理地模拟普通函数指针的接口(interface)。

不可否认,我认为他们在这方面有点过头了......即使是在模板中使用也是如此。


只允许与 nullptr 进行比较的理由反射(reflect)了 original reason完全排除比较:

IIIb. Lack of comparison operators

The comparison operators ==, !=, <, >, <=, and >= are not supported by the function object wrapper.

Rationale: (in)equality and ordering relations cannot be sensibly defined for function objects.

原因很简单:包装的目标可能不支持比较,可能包装方式不同,或者其他原因。

如果您确定仿函数包装的目标是什么,有一种方法可以获取原始参数:

.target_type() .target<T>() .

但是您需要对可能被包装的内容有相当深入的了解才能使用它。

关于c++ - std::function 的 operator== 的真正目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35113798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com