スタックの巻き戻しは、単に戻ることとは異なります。また、スタック内の各下位レベルでエラー ハンドラー (catch ブロック) を検索する必要があります。それが、それを重いプロセスにしている理由です。
そのため、本当に例外的な状況でのみ例外を使用する必要があります。例外処理に関する警告は、単に例外をスタックの上位にデータを配信する方法と見なす人向けです。「賢い」プログラミングをするのが好きな人。彼らはそれが問題を回避するための巧妙な方法だと考えていますが、その代わりに、予期していなかった 2 つの新しい問題を引き起こします。
一般に、(真に例外的な状況の場合) リターン コードではなく例外を使用することをお勧めします。これにより、コードが読みやすく、維持しやすくなります。たとえば、どちらが読みやすく、維持しやすいでしょうか?
void MyMethod()
{
try
{
Method1();
Method2();
Method3();
}
catch(SomeException const & e) // edited per Mordachai's suggestion
{
// handle SomeException
}
catch(SomeOtherException const & e)
{
// handle SomeOtherException
}
}
void MyMethod()
{
int err;
err = Method1();
switch(err)
{
case SOMEERRORCODE:
// handle some error code
break;
case SOMEOTHERERRORCODE:
// handle some other error code
break;
}
err = Method2();
switch(err)
{
case SOMEERRORCODE:
// handle some error code
break;
case SOMEOTHERERRORCODE:
// handle some other error code
break;
}
err = Method3();
switch(err)
{
case SOMEERRORCODE:
// handle some error code
break;
case SOMEOTHERERRORCODE:
// handle some other error code
break;
}
}