我在思考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;
}
答案 0 :(得分:4)
通常的选择思路是:它取决于你预期失败的频率。
如果您希望它经常失败,那么检查后检查会更好,因为检查可能比处理异常更便宜。
如果您认为失败不是很少,那么例外可能是更好的选择,因为您不会浪费资源不断检查您所知道的可能是正确的。使用例外来处理例外情况。
当然,虽然没有对特定情景进行基准测试,但这完全是主观的。什么时候失败的情况很少见,以保证例外?
这并不能回答你的标题问题,但这是一个很好的指导方针。希望其他人可以回答其他部分。