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 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出来的值就消失了。一般来说,更改函数不应当以传值的方式返回对象。
除了异常安全,还有以下原因:
- STL中的stack的pop函数为什么不返回值?
- 为什么C++中stack的pop()函数不返回值而返回void
- 为什么C++中stack/queue的pop()函数不返回值而返回void
- 1.1.40.stl中的pop_back和 pop函数为什么不带返回值?--为了不减弱 异常安全性-
- 关于STL中的pop操作为什么没有返回值
- STL stack pop函数
- c++ stl栈容器stack的pop(),push()等函数用法介绍及头文件
- stl 的stack函数
- C++中的函数重载中为什么不考虑返回值类型?
- STL中的stack的应用
- c++ pop不返回栈顶元素的机制
- C++ STL stack queue 的使用函数
- Stack.Peek 与 stack.pop 的区别
- Stack.Peek 与 stack.pop 的区别
- c++ stl栈容器stack的pop(),push()等用法介绍
- c++ stl栈容器stack的pop(),push()等用法介绍及头文件
- c++ stl栈容器stack的pop(),push()等用法介绍及头文件
- c++ stl栈容器stack的pop(),push()等用法介绍及头文件
- 我的搜索引擎继7月份第二次开放测试后,现在进行第三次开放测试,前两次分别用CGI+Html、Java做的客户端网站,这次学习了4个月 .NET,用.NET做了一个版本,请大家多批评指正。同时开放网站源代码。(附件中)
- String类用法
- 汉字简繁转换之我见
- 又快过了一天了
- 以后要常来...
- STL中的stack的pop函数为什么不返回值?
- 2007cy
- Test
- 断言的简单应用
- 周末闲逛
- 买点东西带给哥们
- 2007: Web 2.0 Companies I Couldn’t Live Without
- 过去半个月的学习资料整理!(二)
- 一个将程序注册为系统服务的源代码