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是一種流氓回報價值。運行應該返回值的函數的末尾會產生未定義的行爲。在實踐中,您最終會看到預期返回值的寄存器中發生的任何值。 –