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