3 回答
![?](http://img1.sycdn.imooc.com/545869510001a20b02200220-100-100.jpg)
TA贡献1804条经验 获得超7个赞
为什么std::function平等不具有可比性?
std::function是用于任意可调用类型的包装,因此,要完全实现相等性比较,您必须要求所有可调用类型都具有相等性,从而给实现函数对象的任何人带来负担。即使那样,您也会得到一个狭义的等式概念,因为如果(例如)等效函数是通过以不同顺序绑定参数构造的,则等效函数会比较不等式。我认为,在一般情况下无法测试等效性。
什么是“类型系统中可能的孔”?
我想这意味着删除操作符,并确定使用它们永远不会给出有效的代码,比证明在某些以前未发现的极端情况下不存在不必要的隐式转换的可能性要容易得多。
std::shared_ptr有何不同?
std::shared_ptr具有明确定义的相等语义;当且仅当两个指针均为空或非空且指向同一对象时,两个指针才相等。
![?](http://img1.sycdn.imooc.com/5458655200013d9802200220-100-100.jpg)
TA贡献1772条经验 获得超8个赞
我可能错了,但是我认为std::function对象的相等性在一般意义上是不可解决的。例如:
#include <boost/bind.hpp>
#include <boost/function.hpp>
#include <cstdio>
void f() {
printf("hello\n");
}
int main() {
boost::function<void()> f1 = f;
boost::function<void()> f2 = boost::bind(f);
f1();
f2();
}
是f1和f2等于?如果我添加任意数量的函数对象,这些对象以各种方式相互包装,最终归结为对f... 的调用仍然相等,该怎么办?
- 3 回答
- 0 关注
- 1043 浏览
添加回答
举报