我知道std::queue::pop()
返回void
。有两个原因:
精细。
现在,如果我正确理解了新的C++ 11 move语义,则第二个不再是有效的参数。
因此...阻止
std::queue
具有类似pop
的函数返回值的唯一原因在于move构造函数是否抛出?我很难考虑这种移动构造函数将抛出的情况。谁知道一个例子?
我想
std::stack::pop()
,std::vector::pop_front()
,std::vector::pop_back()
,std::deque::pop_front()
,std::deque::pop_back()
,std::list::pop_front()
,std::list::pop_back()
以及其他内容也是如此。 最佳答案
使用聪明的SFINAE技术,确实有可能只为实现无掷移动或无掷复制的数据类型提供原子无掷pop_and_move()。
甚至还有一个noexcept()构造可用于查看是否可能抛出异常。
特别是C++ 11中扩展SFINAE的新概念之一是,如果主体不进行编译,则该函数将不存在。因此,可以基于noexcept()实现。
我想说,为了向后兼容,该函数需要一个新名称,因此,它可以与分别调用它们的现有功能共存,而不破坏没有语义允许的类型的容器。
关于c++ - queue::pop现在可以返回一个值吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9191781/