为什么 std::queue::pop 不返回值
尽管返回看似多余的信息,std::queue:: pop() 故意省略返回值以确保出现异常时的安全性。
建议的返回值的解决方案通过引用弹出的元素(如 myqueue.front() 中)仍然需要在使用时创建副本。此复制操作通常称为移动或复制构造函数,可能会引发异常。
考虑以下场景:
auto x = myqueue.pop(); // calls the copy constructor of T
如果 T 的复制构造函数失败,则队列的状态为已更改(例如,该元素已从队列中删除),但未生成返回值。这会使队列处于不一致的状态,并可能会丢失弹出的元素。
此外,当不需要弹出的值时,返回引用还会引入效率问题。相比之下,std::queue 当前的设计将删除元素(pop())和检查其值(front())的操作分开,提供了安全性和效率。
以上是为什么 `std::queue::pop()` 不返回值?的详细内容。更多信息请关注PHP中文网其他相关文章!