如何在C ++中进行错误处理和捕获

时间:2015-08-13 18:04:31

标签: c++ error-handling try-catch

问题草图:

double& ComplexNumber::operator[](const unsigned index){
   if(index>1){
       std::cerr<<"Index out of bounds"<<std::endl;
   }else if(index==0){return x;
   }else if (index==1){return y;
   }
   return x;
}

这只是一些虚拟代码来显示它会发生的位置。

问题:

这里的想法是当一些不受欢迎的事情发生时我们想要做什么?

来自Java,我们会抛出一个异常而且“return”不会被执行,而“catch子句会相应地处理。

但是这在C ++中是如何工作的? 在上面的代码中,我将返回x因为它需要double&。但这会破坏调用此函数的代码。

1 个答案:

答案 0 :(得分:3)

与java中的推理大致相同,抛出异常,除非您需要与传统/非C ++代码接口。

#include<stdexcept>

double& ComplexNumber::operator[](const unsigned index){
   if(index>1){
       throw std::out_of_range("Index out of bounds");
   }

   if(index==0){
       return x;
   }
   return y;
}

作为一个侧面点,如果你想从java带来所有的异常处理习惯,请记住C ++中没有finally子句。使用RAII范例以确保清理发生:这将最终导致更清晰,更安全的代码。

除此之外,按价值投掷,通过引用捕获,通过写作重新抛出:

try {
    // ComplexNumber cmplx defined somewhere
    cmplx[2];
} catch (std::out_of_range& ex) {
    // ...
    throw;
}

只要你花时间在某些时候了解这些经验法则背后的原因,你就可以开始了。