为什么 pop() 返回值是 void

数算 MOOC 的思考题:STL 为什么把 pop 和 top 分开?

  1. pop 如果有返回值的话,显然不能返回一个引用。如果是值的话,就不是很高效了——它会产生至少一次多余的构造函数调用。
  2. 如果 std::stack<T> 是一个模板类, pop 返回的结果需要调用复制构造函数。如果这个构造函数内部足够复杂,甚至出发了异常,那么这里面的 pop 的返回值就是一个 rvalue…… 在过程中就丢失了…… 并没有办法找回