ホームページ >バックエンド開発 >C#.Net チュートリアル >C++ 例外処理: システム関数の呼び出し終了

C++ 例外処理: システム関数の呼び出し終了

php是最好的语言
php是最好的语言オリジナル
2018-08-10 15:29:222102ブラウズ

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. #terminate が呼び出される:


1 例外が送信された場合、およびコンストラクターが例外を生成した場合

2 例外が送信された場合、またはデストラクターが例外を生成した場合

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(...){  
 }  
}

関数の場合 スロー例外がスローされるとき、オブジェクトが関数の内部で構築されている場合、システムは最初にオブジェクトのデストラクターを呼び出します。オブジェクトがデストラクターを呼び出した後、オブジェクトのスローを開始します。例外。
  1. 同時に、継承関係のあるクラスの例外のうち、サブクラスの例外を先頭に、基底クラスの例外を最後に配置する必要があります。親クラスの例外が最初に処理され、親クラスの例外が最後に処理されます。

[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... を使用してキャプチャします。 すべての例外は最後に配置する必要があります。
  1. 省略記号例外ハンドラーはパラメーターを受け入れることができないため、例外に関する情報を取得することは不可能であり、例外の種類を知ることもできません。 catch ステートメントは、リソースをクリーンアップし、キャッチされた例外を再スローするためによく使用されます。
関連する推奨事項:

例外処理の使用例

nginx php-fpm 502 不正なゲートウェイ例外ソリューション

以上がC++ 例外処理: システム関数の呼び出し終了の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。