c语言中catch函数,c ++-函数的try-catch语法之间的区别

第一个语法:

try块的作用域在成员初始化列表完成之后开始,因此,在成员初始化期间抛出的任何异常都不会被此try-catch块捕获。

第二种语法:

它确保了如果在“成员初始化”列表期间引发异常,那么您就可以捕获该异常。

第三种语法:

它确保从函数体内try块的开始括号之间抛出的任何异常都被适当地捕获,这意味着在参数传递过程中引起的任何异常(如果可能发生)都不会被捕获在try-catch块中。

因此,是的,它们提供的功能明显不同。

编辑:

在构造函数和析构函数中使用第二种语法(function-try-block)时要考虑的一些准则:

根据C ++标准,

如果catch块没有抛出(要么抛出原始异常,要么抛出新的东西),并且控制权到达构造函数或析构函数的catch块的末尾,那么原始异常将自动被抛出。

简单来说:

构造函数或析构函数的try-block的处理程序代码必须通过发出一些异常来结束。

准则1:

构造函数的try-try块处理程序只有一个目的-转换异常。 (并且可能做日志记录或其他一些副作用。)它们对于任何其他目的都没有用。

从析构函数中抛出异常是一个坏主意,请看这里了解原因。

准则2:

析构函数try-try块根本没有实际用途。 他们永远都不会检测到任何东西,即使由于邪恶的代码而要检测到的东西,该处理程序对于执行任何操作也不是很有用,因为它无法抑制异常。

准则3:

始终在构造函数或析构函数主体中的本地try-block处理程序中清理非托管资源的获取,而永远不要在构造函数或析构函数function-try-block处理程序中进行清理。

对于标准粉丝:

C ++标准的15.3条第15款:

如果return语句出现在构造函数的function-try-block的处理程序中,则程序格式错误。

C ++标准第15.3节第16段:

如果控制到达构造函数或析构函数的function-try-block的处理程序的末尾,则将处理的异常重新抛出。 否则,当控制权到达function-try-block(6.6.3)的处理程序的末尾时,函数将返回。 从function-try-block的末尾流出就等于没有值的返回。 这会导致返回值函数(6.6.3)出现不确定的行为。

参考文献:

看看这里必须阅读的资源以获得更多详细信息和说明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值