STL中的stack的pop函数为什么不返回值?

来源:互联网 发布:java字符串base64编码 编辑:程序博客网 时间:2024/05/16 12:06

STL中的stack的pop函数为什么不返回值?

以前没有仔细想过,今天看异常安全部分,才知道了其中的缘由:

假设pop需要返回一个值,实现如下

template<class T>
T stack
<T>::pop()
{
  
if( vused_ == 0)
  {
    
throw "pop from empty stack";
  }
  
else
  {
    T result 
= v_[vused_-1];
    
--vused_;
    
return result; 
  }
}


看起来没什么问题,但是考虑这种情况:
T t = s.pop();
如果此时把函数的返回值拷贝到变量t的时候产生了异常,那么刚才的s pop出来的值就消失了。一般来说,更改函数不应当以传值的方式返回对象。


除了异常安全,还有以下原因:

原创粉丝点击