【发布时间】:2016-11-12 12:25:09
【问题描述】:
priority_queue 的 top() 返回的 const 引用在调用 pop() 后发生变化(Visual Studio 2015)
priority_queue<int> queue;
queue.push(1);
queue.push(2);
queue.push(3);
const int & m = queue.top();
cout << m << endl; // 3
queue.pop();
cout << m << endl; // 2
queue.pop();
cout << m << endl; // 1
如果通过auto & m = queue.top(); 得到最高值,那么输出也是3 2 1。
如果通过auto m = queue.top(); 获得最高值,则输出为3 3 3。
这背后的机制是什么?
【问题讨论】:
-
未定义的行为,您创建了对不再存在的元素的引用。
-
不知道为什么这被否决了,这似乎是一个足够公平的问题
标签: c++ auto const-reference