0
所以我有一个模板类此功能:的std :: out_of_range异常怪异输出
T getValue(int x, int y) const throw(logic_error, out_of_range) { // value getter
try {
if (x > rows || y > cols || x <= 0 || y <= 0)
throw out_of_range("Invalid x or y.");
else
return data[cols*(x-1)+(y-1)];
} catch (out_of_range& e) {
cerr << e.what() << endl;
}
}
例外作品,如果我尝试给它一个超出范围的数字,但输出始终是:
Invalid x or y.
1
我一直在尝试一个小时,弄清楚那个1从哪里来,我错过了什么世界?它当然与std :: out_of_range有关,但我无法找出究竟是什么。
编辑这是关于一个模板矩阵:
Matrix<int> a(2, 2, 0); // creates a 2x2 matrix of all zeros
cout << a.getValue(3, 2) << endl; // prints the value at row 3, col 2, which doesn't actually exists; the output is as shown above
此外,值得注意的是,
int b = a.getValue(3, 2);
给出预期输出:
添加'返回3;'只是'getValue'右花括号之前并再次运行代码。这应该清楚发生了什么事情。 –
做过了;现在输出的数字是3,所以我得到的是一个流氓回报值。为什么我得到那个?如果函数不能继续,那么是否有例外可以帮助我避免返回任何值? – Zelethil
@Zelethil - 代码捕获异常。正常执行继续在catch子句之后。而且,是的,1是一种流氓回报价值。运行应该返回值的函数的末尾会产生未定义的行为。在实践中,您最终会看到预期返回值的寄存器中发生的任何值。 –