C ++解除引用std :: priority_queue :: top

时间:2016-02-02 18:43:21

标签: c++ reference priority-queue

文档状态std::priority_queue::top返回对priority_queue中top元素的常量引用,但是在打印top元素时,不使用unary引用运算符。

// priority_queue::top
#include <iostream>       // std::cout
#include <queue>          // std::priority_queue

int main ()
{
  std::priority_queue<int> mypq;

  mypq.push(10);
  mypq.push(20);
  mypq.push(15);

  std::cout << "mypq.top() is now " << mypq.top() << '\n';

  return 0;
}

隐式取消引用top()还是返回值是副本?

2 个答案:

答案 0 :(得分:1)

您无需取消引用引用。您只需要取消引用指针,而不是引用。

答案 1 :(得分:1)

  

top()被隐式取消引用还是返回值是副本?

没有价值副本,除非你制作一个。从reference documentation std::priority_queue::top()开始,返回const &T

  
    

const_reference top() const;     返回对优先级队列中top元素的引用。在调用pop()时将删除此元素。如果使用默认比较函数,则返回的元素也是队列中元素中最大的元素。

  

如果您使用

 int x = mypq.top();

制作副本。如果你使用

 const int& x = mypq.top();

你将有一个直接(const)引用。

  

但是在打印top元素时,不使用一元解除引用运算符。

假设您的意思是dereferncing operations之一,解除引用引用根本不需要,请考虑原始值的别名。您可以为T重载这些运算符,但这不会影响std::priority_queue::top()