C++ 取消引用 std::priority_queue::top [重复]

Posted

技术标签:

【中文标题】C++ 取消引用 std::priority_queue::top [重复]【英文标题】:C++ dereferencing for std::priority_queue::top [duplicate] 【发布时间】:2016-02-02 18:43:21 【问题描述】:

文档说明std::priority_queue::top 返回对priority_queue 中顶部元素的常量引用,但在打印顶部元素时,不使用一元解引用运算符。

// 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() 是被隐式取消引用还是返回值是副本?

【问题讨论】:

【参考方案1】:

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

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

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

如果你使用

 int x = mypq.top();

制作了一份副本。如果你使用

 const int& x = mypq.top();

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

但在打印顶部元素时,不使用一元解引用运算符。

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于C++ 取消引用 std::priority_queue::top [重复]的主要内容,如果未能解决你的问题,请参考以下文章

C++:取消引用指针

如何在 C++ 中取消引用指针对象?

向量迭代器不可取消引用 C++

C++ 构建警告:取消引用类型双关指针将破坏严格别名规则

C++ 中指针取消引用的随机行为

为啥在使用静态方法时取消引用 nullptr 而不是 C++ 中的未定义行为?