ホームページ >バックエンド開発 >C#.Net チュートリアル >C++ 例外処理: システム関数の呼び出し終了
C における例外処理のプロセスは次のとおりです: プログラムの実行中に例外が発生した場合、この関数で例外を処理する必要はなく、代わりにエラー メッセージがスローされ、上位関数に渡されます。上位レベルで解決され、失敗した場合は上位レベルに渡されて処理されます。この方法で段階的にアップロードし、最高レベルまで処理できない場合、実行中のシステムは自動的にシステム関数 terminate を呼び出します。
terminate 関数の使用方法を学習すると、例外処理に役立ちます
一 例外が発生したときに終了関数が呼び出される場合 コード:
[cpp] view plaincopyprint? #include <iostream> #include <exception> using namespace std; void on_terminate(){ cout<<"terninate function called!"<<endl; cin.get(); } int main(void){ set_terminate(on_terminate); throw exception(); cout<<"terminate function not called!"<<endl; cin.get(); return 0; }
1 例外が送信された場合、およびコンストラクターが例外を生成した場合
3 静的オブジェクトの構築または破棄によって例外が送信された場合
4 atexit に登録した関数で例外が発生した場合
5 例外をカスタマイズしたが、実際には例外が発生しない場合 ##6 デフォルトの unExcepted() 関数を呼び出す場合
例:
[cpp] view plaincopyprint? #include <iostream> #include <exception> using namespace std; void on_terminate(){ cout<<"terminate function called!"<<endl; cin.get(); } class custom_exception{ custom_exception(){ } custom_exception(const custom_exception& excep){ throw exception(); } }; void case_1(){ try{ throw custom_exception(); } catch(...){ } }関数の場合 スロー例外がスローされるとき、オブジェクトが関数の内部で構築されている場合、システムは最初にオブジェクトのデストラクターを呼び出します。オブジェクトがデストラクターを呼び出した後、オブジェクトのスローを開始します。例外。
[cpp] view plaincopyprint? #include<iostream> using namespace std; class X { public: class Trouble {}; //注意:类中嵌套类的申明和定义,学习!!! class small: public Trouble {}; class big:public Trouble {};//类中的继承!!! void f(){ throw big(); } }; int main() { X x; try{ x.f(); } catch(X::Trouble &) { cout<<"caught Trouble"<<endl; } catch(X::small&) { cout<<"caught small"<<endl; } catch(X::big&) { cout<<"caught big"<<endl; } return 0; }この場合、スローされた big() 型例外はトラブル クラスによって独占されます。すべての例外を順番にキャプチャするには、逆方向に記述する必要があります。 use... を使用してキャプチャします。 すべての例外は最後に配置する必要があります。
例外処理の使用例
nginx php-fpm 502 不正なゲートウェイ例外ソリューション
以上がC++ 例外処理: システム関数の呼び出し終了の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。