对于std :: priority_queue,我假设第一个模板参数指定了类型,第二个模板参数应该是该类型的容器.例:
priority_queue> someQueue;
但是,以下代码编译并似乎运行正常:
class SomeClass { }; int main() { priority_queue> pq; int x = 9; pq.push(x); int t = pq.top(); cout << t << endl; pq.pop(); return 0; }
上面的代码是无效的(即给出UB)?
如果它有效 - someClass
在priority_queue中使用的第一个模板参数(即)是什么.
在C++ 11规范中,关于std::priority_queue
§23.6.4 的部分.在其中,第一个模板参数只是用于容器的默认类型,而不是其他任何内容.
实际值类型取自容器.
该类声明为
template< class T, class Container = std::vector, class Compare = std::less > class priority_queue;
[取自此参考 ]
该声明显示了使用第一个模板参数的方式,时间和位置.
通过LWG第2566号新鲜投票进入杰克逊维尔的工作文件:
T
容器适配器的第一个模板参数应表示与之相同的类型Container::value_type
.
相应地写入会std::priority_queue
导致未定义的行为.