首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >异常规范,有用还是没用?

异常规范,有用还是没用?
EN

Stack Overflow用户
提问于 2012-06-28 19:50:14
回答 4查看 926关注 0票数 4

第一个免责声明:这并不是要引起“语言战争”。我真的需要这个(对主题的澄清)在我的报告中,我只想有有效和坚实的论点。

好的,这就是问题:

在C++中,异常规范已经从C++11标准中删除,因为它被认为是弊大于利。

另一方面,在Java中,异常规范被认为是好的和有用的东西。

这两个概念(拥有异常规范的目的)在这两种语言中是否不同,这就是为什么这两个社区对它们的看法不同,或者这些概念是相似/相同的?

是哪一个?异常规范是好事还是坏事?或者它在Java语言中是好的,因为(我想在这里看到一些原因),而在C++中是不好的,因为(原因在这里)。

感谢任何有建设性帮助的人。

EN

回答 4

Stack Overflow用户

发布于 2012-06-28 20:01:06

抛开其他事情不谈,我认为Java和C++异常规范之间的主要区别在于,在Java语言中,规范是函数类型的一部分,编译器强制您不能允许检查的异常转义函数,除非它们是函数类型的一部分。

因此,Java检查异常提供了一种有限的/有缺陷的方法来跟踪哪些函数抛出了哪些异常。C++异常规范提供了一种有限/有缺陷的方法来防止对函数的调用抛出特定的异常(或任何异常)。

由于它们具有不同的目的,因此它们的成败必须分别进行评估。在实际程序员避免使用它们的程度上,我认为您可以放心地说它们都有些失败,但这是您可以对两者进行相同评估的所有方法。这一程度对于Java来说是相当高的,对于C++来说也非常高。它们的有益用途,以及在每种语言中的确切成功程度都是不同的。

票数 7
EN

Stack Overflow用户

发布于 2012-06-28 20:13:10

Java和C++中的异常规范以一种截然不同的方式工作。

对于C++的观点来说,这是一个非常好的信息来源。http://www.gotw.ca/publications/mill22.htm

C++设计的主要缺点是,如果抛出一个意想不到的异常,程序很可能会崩溃(有关详细信息,请参阅链接)。因此,异常规范是一个约束,它将应用得太晚。

Herb Sutter在文章结束时说:

道德#1:永远不要编写异常规范。寓意#2:除了可能是空的,但如果我是你,我甚至会避免这样做。

Java异常规范框架是不同的,你有两种类型的异常: checked (编译时)和runtime exception (非常像没有异常规范的C++ )。

对于检查过的异常,编译器将强制开发人员处理这些异常,否则应用程序将不会编译。这是好的和有用的,但是运行时和检查异常之间的区别并不是完全清楚的,这取决于开发人员,它可能会产生混淆。此外,即使使用简单的程序习惯用法(例如Checked exception specification and strategy pattern),检查的异常也会涉及到困难的决策。

像往常一样,由于语言特性不明确,最终的结果是对它的错误使用。例如,C#设计者决定放弃它们。

我认为,在这个特定的主题上,C++设计比C++03更好(我是java的超级粉丝),因为它允许开发人员以更具描述性的方式编写更好的代码。然而,您需要花费精力(编码标准和代码审查)来在开发团队中生成一致的代码。

票数 1
EN

Stack Overflow用户

发布于 2012-06-28 19:55:16

许多年前,Java的检查异常已经失宠,因为正如您所说,它们弊大于利。现在的人们主要是想办法避免它们,通常是通过包装RuntimeExceptions。

在Effective中,Josh Bloch仍然在“异常的,但预期的结果”的情况下为检查的异常辩护,但事实是,API编写者不是决定哪个是预期的结果,哪个不是,例如,在上下文中,即使是一个FileNotFoundException,也可能是一个意想不到的致命的结果。

因此,至少,任何公共库都不应该使用检查异常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11243990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档