免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: wwwsq
打印 上一主题 下一主题

[C++] 有人会在程序中try catch吗? [复制链接]

论坛徽章:
0
101 [报告]
发表于 2008-09-05 01:01 |只看该作者
原帖由 zylthinking 于 2008-9-5 01:00 发表


当open()内部实现变化的时候,。。。。。。。。。。 如果open()的返回值里面只有-1代表失败
你怎么总是拿双重标准作答, 用异常就要内部实现变了, 要抛出其它的异常, 用返回值就是无论怎么变, 都返回-1 ...



采用异常机制,open()函数无法保证只有-1代表失败,除非你在open()内部catch所有异常。这样,仍然会存在一个catch所有异常而掩盖错误的问题,只不过这个掩盖从my_open()转移到了open()。

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
102 [报告]
发表于 2008-09-05 01:03 |只看该作者
当open()内部实现变化的时候,你在my_open()可能就不得不catch新的异常
貌似open的返回值变化的时候, 你就不重新if新的返回值似的。
相同的意思我上面贴子已经表达了, 如果你认为我的不对, 直接反驳我, 装作看不到, 然后仍提出旧观点来, 不是找着让我把前面贴子复制一份贴在这里么

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
103 [报告]
发表于 2008-09-05 01:06 |只看该作者
原帖由 wwwsq 于 2008-9-5 01:01 发表



采用异常机制,open()函数无法保证只有-1代表失败,除非你在open()内部catch所有异常。这样,仍然会存在一个catch所有异常而掩盖错误的问题,只不过这个掩盖从my_open()转移到了open()。


我不采用异常机制就能保证 只有-1代表失败? 那好 -2 代表什么, -n代表什么? 你可以利用不同的值代表不同的错误, 我就不能用不同的异常代表不同的错误了?

论坛徽章:
0
104 [报告]
发表于 2008-09-05 01:07 |只看该作者
原帖由 zylthinking 于 2008-9-5 01:03 发表
当open()内部实现变化的时候,你在my_open()可能就不得不catch新的异常
貌似open的返回值变化的时候, 你就不重新if新的返回值似的。
相同的意思我上面贴子已经表达了, 如果你认为我的不对, 直接反驳我, 装 ...



open()的返回值是接口的一部分,内部增加了一行obj.do_somthing()不会影响-1唯一的代表open()失败。

而采用异常机制则不一样。在open()的内部实现增加了一行obj.do_somthing()可能会导致新的异常被抛出,除非你catch住新增的obj.do_somthing()的所有异常,而这会掩盖obj.do_somthing()可能的错误。

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
105 [报告]
发表于 2008-09-05 01:09 |只看该作者
原帖由 wwwsq 于 2008-9-5 01:01 发表



采用异常机制,open()函数无法保证只有-1代表失败,除非你在open()内部catch所有异常。这样,仍然会存在一个catch所有异常而掩盖错误的问题,只不过这个掩盖从my_open()转移到了open()。


你是不是这个意思: 采用了异常, 抓住了所有异常而返回 -1, 就是隐藏了错误, 不采用异常, 无论什么错误我都返回 -1, 但我却没有隐藏错误, 因为我是返回值机制, 我的血统好。

论坛徽章:
0
106 [报告]
发表于 2008-09-05 01:10 |只看该作者
原帖由 zylthinking 于 2008-9-5 01:06 发表


我不采用异常机制就能保证 只有-1代表失败? 那好 -2 代表什么, -n代表什么? 你可以利用不同的值代表不同的错误, 我就不能用不同的异常代表不同的错误了?



返回-2或者-n就是open()有问题,很简单,找open()那边的人的麻烦。open()的内部实现可以随便改,但是接口不能随便改。这是返回值可以做到的。

而异常机制则不同,内部实现增加了一行obj.do_something()就可能抛出新的异常。你如果catch住obj.do_something()所有可能的异常,则open()函数会掩盖obj.do_something()的错误。

论坛徽章:
0
107 [报告]
发表于 2008-09-05 01:11 |只看该作者
原帖由 zylthinking 于 2008-9-5 01:09 发表


你是不是这个意思: 采用了异常, 抓住了所有异常而返回 -1, 就是隐藏了错误, 不采用异常, 无论什么错误我都返回 -1, 但我却没有隐藏错误, 因为我是返回值机制, 我的血统好。



在异常机制里面,为了保证只返回-1,就不得不catch内部实现的所有异常,而这种做法会掩盖更下一层的错误。

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
108 [报告]
发表于 2008-09-05 01:12 |只看该作者
原帖由 wwwsq 于 2008-9-5 01:07 发表



open()的返回值是接口的一部分,内部增加了一行obj.do_somthing()不会影响-1唯一的代表open()失败。

而采用异常机制则不一样。在open()的内部实现增加了一行obj.do_somthing()可能会导致新的异常被抛出 ...


很显然, 为什么异常就不能作为借口的一部分定义呢?

论坛徽章:
0
109 [报告]
发表于 2008-09-05 01:14 |只看该作者
原帖由 zylthinking 于 2008-9-5 01:12 发表


很显然, 为什么异常就不能作为借口的一部分定义呢?



假如open()函数约定只能返回FailOpenException,那么在open()里面不得不加上

try {
  obj.do_something();
}
catch {...} {
  throw new FailOpenException();
}

这样的代码。

于是obj.do_something()的错误被掩盖了。

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
110 [报告]
发表于 2008-09-05 01:14 |只看该作者
原帖由 wwwsq 于 2008-9-5 01:10 发表



返回-2或者-n就是open()有问题,很简单,找open()那边的人的麻烦。open()的内部实现可以随便改,但是接口不能随便改。这是返回值可以做到的。

而异常机制则不同,内部实现增加了一行obj.do_something( ...


这就奇怪了, -2, -n是open有问题, 因为接口不能变, 而采用异常的就可以随便变是么, 都是人写的, 厚此而薄彼, 不可取也
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP