错误处理:在C++中返回值与异常

pro*_*eek 7 c++ oop exception-handling

在询问捕获'除以0'异常的过程中,我发现使用C++,我们不能这样做.我的意思是,除以0不会抛出std :: exception.

我发现的一些提示是我必须检查值,然后自己抛出异常.

我说它令人困惑,因为我认为C++采用了异常的想法,以便通过返回值方法来替换"旧的C/UNIX报告错误".

这是我的问题

  • Q1:为什么C++不会因为除以0而抛出std :: exception错误?那背后有什么理由吗?
  • Q2:通常,C++用户使用什么错误处理方案?总是抛出错误,异常是除以0错误?
  • 问题3:通常,OOP语言更喜欢(甚至强制)使用异常.它是否正确?

GMa*_*ckG 9

C++假设您知道自己在做什么,不为您不需要的东西付费,并且不会对其所针对的平台做出任何假设.

如果你想分割数字,那么要求编译器检查分母并在分割之前抛出是非常低效的.(我们没有要求它这样做.)所以这个选项已经出来了; 我们不能对每个部门进行这种检查,因为大多数部门都不是零,所以特别浪费.

那么,我们怎样才能将零除以找出它是否有效?因为C++不能假设它的平台,它不能假设有一种方法来检查结果,硬件方面.也就是说,虽然许多CPU会在分零时跳转到某种类型的中断,但C++语言无法保证这样的事情.

唯一的选择是让行为不确定.而这正是你得到的:未定义的行为.


OOP语言可能会做某些事情或者其他事情,因为OOP没有明确定义而且C++不是OOP语言也没关系.通常,使用最合适的工具.(例外情况适用于特殊情况.)