为什么我可以这样做:
stable_sort(it1, it2, binary_function);
但不是这个:
priority_queue<type, vector<type>, binary_function> pq;
为什么我可以在第一种情况下使用函数,但在第二种情况下需要一个对象?
为什么我可以这样做:
stable_sort(it1, it2, binary_function);
但不是这个:
priority_queue<type, vector<type>, binary_function> pq;
为什么我可以在第一种情况下使用函数,但在第二种情况下需要一个对象?
priority_queue
是一个模板,它需要一个类型作为参数,其中 isbinary_function
是一个函数对象。
如果您查看 上的参考资料std::stable_sort
,您会看到binary_function
您提供的也应该是一个函数对象......两者之间没有区别,除了可能在第二种情况下没有适当的“强制转换”或转换从一个函数到一个适当的函数对象。
我相信这可能是因为*sort
函数直接使用函子,并且立即,因此如果函数地址在*sort
函数调用时有效,它将在函数调用期间有效。在创建使用 this 作为数据成员的容器时(本质上),您不能确定函数引用会在容器对象的生命周期内失效。我知道这是一个松散的挥手解释,但这是我能想到的最好的解释。也许在 C++ 中,对二进制函数的引用将被隐式转换为 a 的构造,std::function
以便“复制”该函数并且不存在有效性问题。
我希望我现在没有失去你...