使用不同类型的比较实例构造 priority_queue 个实例
Constructing priority_queue instance with Compare instance of different type
谁能解释一下为什么我的编译器 (GCC) 接受下面的代码是有效的?
priority_queue<int, deque<int>, less<int>> pq(greater<int>());
我希望此构造函数(对于具有 less<int>
作为 Comparator
的类型的实例,如为 priority_queue
实例 pq
所指定)与的实例不兼容greater<int>
(作为构造函数参数传递),与 less<int>
不同的类型。但是 GCC 出于某种原因接受了这个...
下面的语句:
priority_queue<int, deque<int>, less<int>> pq(greater<int>());
实际上被编译器解析为 声明 的 pq
函数,returns 是 priority_queue
的一个实例,并且需要一个单个参数,是指向不带参数的函数的指针,returns 是 greater<int>
类型的实例。这被称为 Most-vexing parse。
如果你写:
你会看到一个错误
priority_queue<int, deque<int>, less<int> > pq((greater<int>()));
// ^ ^
或(在 C++11 中):
priority_queue<int, deque<int>, less<int>> pq(greater<int>{});
// ^^
谁能解释一下为什么我的编译器 (GCC) 接受下面的代码是有效的?
priority_queue<int, deque<int>, less<int>> pq(greater<int>());
我希望此构造函数(对于具有 less<int>
作为 Comparator
的类型的实例,如为 priority_queue
实例 pq
所指定)与的实例不兼容greater<int>
(作为构造函数参数传递),与 less<int>
不同的类型。但是 GCC 出于某种原因接受了这个...
下面的语句:
priority_queue<int, deque<int>, less<int>> pq(greater<int>());
实际上被编译器解析为 声明 的 pq
函数,returns 是 priority_queue
的一个实例,并且需要一个单个参数,是指向不带参数的函数的指针,returns 是 greater<int>
类型的实例。这被称为 Most-vexing parse。
如果你写:
你会看到一个错误priority_queue<int, deque<int>, less<int> > pq((greater<int>()));
// ^ ^
或(在 C++11 中):
priority_queue<int, deque<int>, less<int>> pq(greater<int>{});
// ^^