首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么std::queue::pop返回值。?

为什么std::queue::pop返回值。?
EN

Stack Overflow用户
提问于 2014-07-30 19:29:47
回答 7查看 66.6K关注 0票数 149

我通过这个page,但我不能得到同样的原因。这里提到的是

“更明智的做法是完全不返回值,并要求客户端使用front()检查队列前面的值。”

但是从front()检查一个元素也需要将该元素复制到lvalue中。例如,在下面的代码段中

代码语言:javascript
运行
复制
std::queue<int> myqueue;
int myint;
int result;
std::cin >> myint;
myqueue.push (myint);

/*将在RHS上创建临时结果,并将其分配给result,如果通过引用返回,则在pop操作后result将变为无效*/

代码语言:javascript
运行
复制
result = myqueue.front();  //result.
std::cout << ' ' << result;
myqueue.pop();

在第五行,cout对象首先创建myqueue.front()的副本,然后将其赋值给result。所以,有什么不同,pop函数也可以做同样的事情。

EN

Stack Overflow用户

发布于 2014-07-30 19:39:16

您所链接的页面回答了您的问题。

引用相关的整个章节:

人们可能会奇怪为什么

()返回value_type,而不是void。也就是说,为什么必须使用front()和pop()来检查和删除队列前面的元素,而不是将这两个元素组合在一个成员函数中?事实上,这种设计有一个很好的理由。如果pop()返回了front元素,那么它必须通过值返回,而不是通过引用返回:通过引用返回将创建一个悬空指针。然而,按值返回的效率很低:它至少涉及一个冗余的复制构造函数调用。由于pop()不可能以既高效又正确的方式返回值,因此更明智的做法是不返回值,并要求客户端使用front()检查队列前面的值。

C++在设计时考虑到了效率,超过了程序员必须编写的代码行数。

票数 40
EN
查看全部 7 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25035691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档