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&
。但这会破坏调用此函数的代码。
答案 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;
}
只要你花时间在某些时候了解这些经验法则背后的原因,你就可以开始了。