对标准中栈的方法的迷惑,谁解释一下?
在C++标准中,使用栈
stack<T> s;
...
s.pop(); //没有返回值
如果在栈中存放的是指向堆指针的话,每次弹栈前都要用s.top()来取得栈顶元素,释放,弹栈。我迷惑的是为什么不在s.pop()方法中返回栈顶元素呢。java的容器就返回,我觉得挺好。不知C++标准为什么这样规定啊?
谁帮个忙,谢谢!
问题点数:15、回复次数:6Top
1 楼oopig(面向对象的猪)回复于 2003-09-01 18:08:24 得分 2
函数(对应查询)和过程(对应动作)分离,是一种设计思想。Top
2 楼jyfcsdn()回复于 2003-09-02 10:04:03 得分 4
关于这个问题的详细解释请详细看
《Exceptional C++》第二章 异常安全性问题与技术
里面详细描述了设计一个异常安全的Stack的设计,从简入繁。
不在这里详细解释了。
为了异常安全所以,stack的top和pop分离了。Top
3 楼oopig(面向对象的猪)回复于 2003-09-02 12:02:44 得分 5
看了看书中的这部分内容,受教!
不过正确的答案应该是jyfcsdn()的回答+我的回答。
《Exceptional C++》中也说明了即使void pop(T &t)这样可以处理为异常安全的实现也是不妥当的,因为没有分离职责(查询和动作),使得函数的内聚性不强。Top
4 楼ppby2002(lovewolf)回复于 2003-09-02 13:21:30 得分 0
谢谢!!Top
5 楼MadLee(风里麦笛)回复于 2003-09-02 15:10:20 得分 2
因为pop后原来的对象已经被删除了,要返回的话必须用值返回,生成临时变量,会严重影响效率。所以不用返回值。和异常没什么关系。Top
6 楼liu_feng_fly(笑看风云 搏击苍穹 衔日月)回复于 2003-09-02 16:59:57 得分 2
这样做是为了异常安全Top




