2017-05-13 16 views
-1

throwキーワードを使用せずに以下のプログラムがどのように実行されているかを知りたい場合は、try-catchブロックでthrowを使用する必要があります。例外処理 - try-catchブロックでthrowキーワードを使用する場合

#include <iostream> 
#include <exception> 
using namespace std; 

int main() { 
try{ 
long double * arr= new long double[1500000000000000000000000000000000000]; 
cout<<"hello,This is an exception handling program"<<endl; 
//throw exception(); 
} 
catch (exception& e){ 
cout << "Standard exception: " << e.what() << endl; 
} 
return 0; 
} 

Output 
Standard exception: std::bad_array_new_length 

答えて

1

try catchが機能するために何かをスローする必要はありません。これらのリンクを見てください。また、この質問は何度も尋ねられ、ここで答えられました。

https://msdn.microsoft.com/en-us/library/hh279678.aspx

https://msdn.microsoft.com/en-us/library/6dekhbbc.aspx

次のリンクはあなたにかなりまともな説明を与えるでしょう。

How to throw a C++ exception

あなたが実際にあなたが他の人がいない間いくつかの例では、スローの使用を示していることを見てきたと思いますそれらを通過するために時間がかかった場合。だから基本に戻る。

try 
{ 
    //throw something; 
} 
catch(...) 
{ 
    //do something 
} 

上記のコードスニペットは、以下の考えを表しています。

コードで潜在的に例外が発生する可能性がある場合は、コードをtryブロックの内側に配置する必要があります。

例外が発生した場合、catch部分は例外をキャッチします。

独自の例外処理クラスを作成するか、他の人のものを使用します。それはあなたが働いているものに相対的です。

アイデアは非常に単純です。これを試してみて、例外をキャッチしてこれを実行して、プログラムがクラッシュしないようにしてください。

だから、何がスローですか、なぜ私はそれを必要としませんか?

throwステートメントは、直接例外をスローしていますか?ストーリーの終わり。このように考える。あなたは2つの数字を分ける関数を持っています、数字はユーザーの入力に基づいています。ユーザが2つの数字を入力し、そのうちの1つが0であり、もう1つが25である場合。

これは、数学のために例外が発生する可能性があります。致命的なクラッシュ。

例外がキャッチされる必要があります。あなたが望むもの、あるいはあなたが望まないものを例外にすることができます。

私が言っていることは、作成したものをあなたのプログラムだけで動作させることができるということです。

あなたはこのコードをなぜ投げ捨てて実行するのですか?

try catchブロックで例外を発生させる必要はありません。例外が発生した場合、それはあなたがそれを投げるかどうかで起こります。したがって、try catchブロックはthrowを必要としません。

たとえば、

try 
{ 

} 
catch(...) // This is a real thing. It's meant to catch everything but don't use it becasue it's bad. 
{ 

} 


try 
{ 
    throw("An exception happened") 
} 
catch(...) 
{ 
    cout << "Nothing actually happened" <<endl; // This block is valid.. 
} 

重要:スローを使用しないように言っているわけではありません。私はあなたの質問に答えるだけで、なぜ試しキャッチをする必要がないのかを説明しています。

+0

:私はあなたのリンクを通過しましたが、明らかにこれらのリンクでthrowキーワードを使用していますが、例外を処理していますが、私の質問は私のコードthrowキーワードを明示的に使用しません。ありがとう – Vibhu

+0

throwは、あなた自身の手でintを処理する例外を取って、潜在的に起こると思われる例外を投げることです。投げを放っても捕獲が阻止されるわけではありませんが、捕獲プロセスはセットアップが適切であれば自動的です。 – Afflicted

関連する問題