假設有一個函數用來計算一些複雜的數學運算。但在運算過程中,可能會發生一些異常。我們必須處理可能發生的不同類型的異常,並執行以下操作。
我們有一個包含一對值的數組,並將其傳遞給函數。如果發生任何異常,我們處理它,否則列印輸出值。
我們只需要處理異常,而不考慮函數產生異常的機制。
因此,如果輸入是arr = {{361643035132, 2297873642249}, {-17, 15}};,那麼輸出將是-
Memory Low! Exception: val1 is negative
第一對值太大而無法處理,所以列印出「記憶體不足」。第二對值的第一個值是負數。提供的函數無法處理,因此生成/拋出異常“val1為負數”,
為了解決這個問題,我們將按照以下步驟進行操作−
#include <iostream> #include <exception> #include <string> #include <stdexcept> #include <vector> #include <cmath> using namespace std; class Solution { private: static int value; public: static int foo(long long val1, long long val2) { value += 1; if(val1 < 0) { throw std::invalid_argument("val1 is negative"); } vector<int> vectorList(val1, 0); int r = -1, c = sqrt(-1); if(val2 == 0) throw 0; r = (val1 / val2) * r; int ans = vectorList.at(val2); return r + val1 - val2 * ans; } static int getVal() { return value; } }; int Solution::value = 0; void solve(int t, long int values[][2]) { for (int i = 0; i < t; i++) { long long val1, val2; val1 = values[i][0]; val2 = values[i][1]; try { cout << Solution::foo(val1, val2) << '\n'; } catch (const std::bad_alloc&) { cout << "Memory Low!\n"; } catch (const std::exception& e) { cout << "Exception: " << e.what() << '\n'; } catch (...) { cout << "Unhandled Exception\n"; } } } int main() { long int arr[][2] = {{361643035132, 2297873642249}, {-17, 15}}; solve(2, arr); }
輸入
long int arr[][2] = {{361643035132, 2297873642249}, {-17, 15}}; solve(2, arr);
Memory Low! Exception: val1 is negative
以上是C++程式範例,展示異常處理的詳細內容。更多資訊請關注PHP中文網其他相關文章!