处理器是否支持例外

Are exceptions supported by processor?

本文关键字:支持 是否 处理器      更新时间:2023-10-16

我在思考 c++ 中的异常

他们是否得到程序的支持?A 或 B 的想法更快?

想法 A = 通过抛出来处理错误

想法 B = 通过返回某个值来处理错误

一个:

int divide(int a, int b);

void sth(){
  try
  {
    int ret = divide(10,0);
  }
  catch (const std::invalid_argument& e)
  {
    std::cout << e.what() << std::endl;
  }
}
int divide(int a, int b){
  if(b == 0)
    throw std::invalid_argument( "B = 0 ?!" );
    return a/b;
}

二)

int divide(int a, int b);

void sth(){
  int ret = divide(10,0); // we want to catch error as above, don't worry about result
  if(ret == -1)
    std::cout << "Divide by 0!" << std::endl;
  else if(ret == -2)
    std::cout << "Other error" << std::endl;
}
int divide(int a, int b){
  if(b == 0)
    return -1;
    return a/b;
}

通常的选择思路是:这取决于你期望它失败的频率。

  • 如果您预计它经常失败,则后期检查更好,因为检查可能比处理异常便宜。

  • 如果您预计失败会更罕见,则例外可能是更好的选择,因为这样您就不会浪费资源不断检查您知道的内容可能是正确的。使用异常来处理异常情况。

当然,这完全是主观的,尽管没有对特定场景进行基准测试。在什么时候失败很少到需要例外?

这并不能回答您的标题问题,但是一个很好的指导方针。希望其他人可以回答另一部分。