int At(int i, int j) const {
try {
if (i >= m.size() || j >= m[0].size())
throw out_of_range("out_of_range");
return m.at(i).at(j);
}
catch (exception& e) {
cout << e.what() << endl;
}
}
int& At(int i, int j) {
try {
if (i >= m.size() || j >= m[0].size())
throw out_of_range("out_of_range");
return m.at(i).at(j);
}
catch (exception& e) {
cout << e.what() << endl;
}
}
int main() {
Matrix one, two(2, 3);
cout << two;
one.Reset(0, 0);
cout << one.At(4, 4);
return 0;
}
在此代码中必须打印出异常:out_of_range,但对我而言是:超出范围
-244281
这个数字是什么?如何从输出中删除它?
最佳答案
如果抛出异常,则catch
处理程序将打印消息("out_of_range"
),然后该函数继续运行,就像什么也没有发生一样。
问题在于,这种“继续运行”会导致函数结束而无需返回任何内容,从而在尝试打印此非返回值时导致未定义的行为。
如果声明一个函数以返回任何内容,则必须返回一些内容。
话虽如此,在At
函数中捕获异常没有任何意义。并且考虑到其中一个变体返回引用,因此很难返回“值”,因为您不能拥有“空”引用。
解决的办法是在函数中完全不使用try-catch
,而是让函数的调用者处理任何可能的异常。
关于c++ - 异常(exception):错误的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63766670/