C++の関数異常宣言
2317 ワード
まずコードを見てみましょう.
このコード
実はここに新しい知識点があります: try ... catch ... 通常機能コードと異常処理コードを区切るための try ... catch ... 関数インプリメンテーションは、2つの部分 に直接分割することができる.関数宣言および定義時に放出可能な例外タイプ を直接指定できます.異常宣言関数と呼ばれる一部は、コード可読性 を向上させることができる.
上記のコードでは
ここでcharタイプの'0'が投げ出されるため、最後のcatch文ブロックが実行されます.
最後に、上記のコードの実行結果を示します.
次に、いくつかの注意点を示します.関数異常宣言時のコンパイラとの契約 関数が例外を宣言すると、宣言された例外しか放出されません. 他の異常を放出すると、プログラムの実行が終了する .は、異常宣言によって直接異常なし関数 を定義することができる.
#include
#include
using namespace std;
int func(int i, int j) throw(int, char)
{
if( (0 < j) && (j < 10) )
{
return (i + j);
}
else
{
throw '0';
}
}
void test(int i) try
{
cout << "func(i, i) = " << func(i, i) << endl;
}
catch(int j)
{
cout << "Exception: " << j << endl;
}
catch(...)
{
cout << "Exception..." << endl;
}
int main(int argc, char *argv[])
{
test(5);
test(10);
return 0;
}
このコード
void test(int i)
とin func(int i, int j)
は定義する時、比較的に奇妙な書き方はどういう意味ですか?なぜint func(int i, int j)
の後ろにthrow(int, char)
が付いていて、void test(int i)
の後ろにtry ... catch...
文ブロックがついているのでしょうか.実はここに新しい知識点があります:
.上記のコードでは
int func(int i, int j) throw(int, char)
{
if( (0 < j) && (j < 10) )
{
return (i + j);
}
else
{
throw '0';
}
}
int func()
の後に、intタイプおよびcharタイプの放出可能な例外タイプが指定されます.すなわち、func関数体は、実行中にintタイプまたはcharタイプの例外を放出する可能性があります.void test(int i) try
{
cout << "func(i, i) = " << func(i, i) << endl;
}
catch(int j)
{
cout << "Exception: " << j << endl;
}
catch(...)
{
cout << "Exception..." << endl;
}
test()
ではtryが使われていますcatch ...文ブロックは正常コードと異常コードを分離し、正常コードが実行中に実行を続行できない場合、事前に宣言された異常を投げ出し、catch文ブロックでキャプチャします.一方、catch文ブロックは予めデータ型を宣言しているので、異常データをキャプチャする際に、そのcatch文を実行すると、一致しない場合、パラメータが...
のcatch文が実行され、コードが任意のタイプであると異常データ型に基づいて判断される.ここでcharタイプの'0'が投げ出されるため、最後のcatch文ブロックが実行されます.
最後に、上記のコードの実行結果を示します.
func(i, i) = 10
func(i, i) = Exception...
次に、いくつかの注意点を示します.