处理器是否支持例外?

时间:2017-01-17 01:40:47

标签: c++

我在思考c ++中的异常

他们是否受到处理者的支持? A或B的想法更快?

创意A =抛出

来处理错误

理念B =通过返回特定值来处理错误

A:

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;
}

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;
}

1 个答案:

答案 0 :(得分:4)

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

  • 如果您希望它经常失败,那么检查后检查会更好,因为检查可能比处理异常更便宜。

  • 如果您认为失败不是很少,那么例外可能是更好的选择,因为您不会浪费资源不断检查您所知道的可能是正确的。使用例外来处理例外情况。

当然,虽然没有对特定情景进行基准测试,但这完全是主观的。什么时候失败的情况很少见,以保证例外?

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