pop_back() 返回值?

新手上路,请多包涵

为什么 pop_back() 没有返回值?我对此进行了谷歌搜索,发现它可以提高效率。这是在标准中这样做的唯一原因吗?

原文由 Parvinder Singh 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

我认为与复制最后一个对象的实例可能会引发异常这一事实有关。这样做时,您将丢失对象,因为 pop_back() 确实将其从容器中删除。用几行代码更好:

 std::vector<AnyClass> holds = {...} ;
try {
  const AnyClass result = holds.pop_back(); // The copy Ctor throw here!
} catch (...)
{
 // Last value lost here.
}

原文由 yves Baumes 发布,翻译遵循 CC BY-SA 3.0 许可协议

效率与它几乎没有关系(或者根本没有关系)。

这个设计是 汤姆嘉吉在 90 年代发表的一篇重要论文 的成果,当时引起了很多人的注意。 IIRC,在其中嘉吉表明不可能设计一个异常安全的堆栈弹出功能。

原文由 sbi 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题