複雑な数学演算を計算する関数があるとします。ただし、操作中にいくつかの例外が発生する可能性があります。発生する可能性のあるさまざまな種類の例外を処理し、次のことを実行する必要があります。
値のペアを含む配列があり、それを関数に渡します。例外が発生した場合はそれを処理し、そうでない場合は値を出力します。
関数が例外を生成するメカニズムに関係なく、例外を処理するだけで済みます。
したがって、入力が arr = {{361643035132, 2297873642249}, {-17, 15}}; の場合、出力は -
Memory Low! Exception: val1 is negative
になります。最初の値のペアは次のとおりです。大きすぎて処理できないため、「メモリ不足」と表示されます。 2 番目の値のペアの最初の値は負の数です。提供された関数を処理できないため、例外「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 中国語 Web サイトの他の関連記事を参照してください。