使用不同类型的比较实例构造priority_queue实例

Constructing priority_queue instance with Compare instance of different type

本文关键字:实例 queue priority 比较 同类型      更新时间:2023-10-16

有人可以解释为什么我的编译器(GCC)接受下面的代码是有效的吗?

priority_queue<int, deque<int>, less<int>> pq(greater<int>());

我希望这个构造函数(对于具有less<int>作为Comparator的类型实例,为priority_queue实例pq指定)与greater<int>的实例(作为构造函数参数传递)不兼容,后者与less<int>的类型不同。但是海湾合作委员会出于某种原因接受了这一点......

以下语句:

priority_queue<int, deque<int>, less<int>> pq(greater<int>());

实际上由编译器解析为pq函数的声明,该函数返回 priority_queue 的实例,并且采用单个参数,是指向不带参数的函数的指针,并返回greater<int>类型的实例。这被称为最烦人的解析

如果您编写以下内容,您将看到一个错误:

priority_queue<int, deque<int>, less<int> > pq((greater<int>()));
//                                             ^              ^ 

或(在C++11 中):

priority_queue<int, deque<int>, less<int>> pq(greater<int>{});
//                                                        ^^