CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  工具平台和程序库

对标准中栈的方法的迷惑,谁解释一下?

楼主ppby2002(lovewolf)2003-09-01 17:51:25 在 C/C++ / 工具平台和程序库 提问

在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

相关问题

  • org.w3c.dom.Node的getChildNodes()方法的迷惑
  • 迷惑,为何这个方法不能用呢?
  • 这个问题麻烦知道给解释一下,迷惑中。。。(关于JET SQL)
  • 迷惑!
  • 迷惑...
  • 迷惑
  • 迷惑
  • 迷惑????????????
  • 迷惑
  • 迷惑

关键词

  • c++
  • 安全
  • 解释
  • 返回
  • 标准
  • 分离
  • 异常安全
  • pop
  • stack

得分解答快速导航

  • 帖主:ppby2002
  • oopig
  • jyfcsdn
  • oopig
  • MadLee
  • liu_feng_fly

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo