gpt4 book ai didi

c++ - 使用不同类型的 Compare 实例构造 priority_queue 实例

转载 作者:行者123 更新时间:2023-11-30 05:42:03 26 4
gpt4 key购买 nike

谁能解释一下为什么我的编译器 (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声明返回 priority_queue 实例的函数, 它有一个参数,是一个指向不带参数的函数的指针,并返回 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>{});
// ^^

关于c++ - 使用不同类型的 Compare 实例构造 priority_queue 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30854990/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com