- 締切済み
例外処理があまり使われない理由について
C++でのプログラミングに関して質問です。 只今勉強中で色々な方のソースを拝見していますが、 参考書や解説サイトにはよく載っている「例外処理(tryとかcatchとか)」を記述したソースを殆ど見ないのですが、 例外処理は使わない方がいいのでしょうか? (処理速度が遅くなるとか、gotoのような暗黙の使ってはいけない理由があるのですかね?) 私自身も面倒なので例外処理は今まで書いたことがないのですが、 例外処理を記述する癖をつけた方がいいでしょうか?
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- temtecomai2
- ベストアンサー率61% (656/1071)
> if文で処理するよりもcatchしたときに処理時間が何倍もかかるようですし、 > 速度を求める為にC言語系を使ってる人も多いので、 > それも影響してるのでしょうか・・・。 そりゃ事態を想定できて適切に処理するためのコードを処理時間が短い方法で書けるんだったらそうすべき。 そっから漏れるケースを例外処理にて行えば?
- xyz846
- ベストアンサー率27% (15/55)
>例外処理は使わない方がいいのでしょうか? 例外処理に関する例題には必要だろうけど それ以外の部分でわざわざ例外処理をして例題のソースを 長くする意味があると思いますか? 例題は伝えたい処理の内容を簡潔にわかりやすくするために例として用意されているものだからです。 Aって事を説明するためにBやCも書いてあったらソースを理解するのが面倒でAと言う要点がぼやけるとだと思いませんか?
お礼
ご回答ありがとうございます。 確かにそうでですよね。 ただ、ゲームやフリーソフトのほぼ完成したプログラムでも 例外処理されていないものが多いので気になりました。 その点は補足不足で申し訳ないです。
- COOL_K2
- ベストアンサー率21% (5/23)
よ~く考えろ。 もし例外的なデータが、 アンタのプログラムに流されたとしたら、 あんたのプログラムはどうなる? オマエさんのプログラムと一緒にOSまで落ちたら オマエさんはシアワセか? それを考えるのが例外処理だ。 んで、それをテストするのが異常系テストだ。 C++に限らず、ソフトウェアを作る際に、 いちばんPGを困らせ、一番胃が痛くなるところだ。 ちなみにそこらへんを美しくコーディングする人間を、 俺はネ申と呼ぶ。 ガンガレ。
お礼
ご回答ありがとうございます。 ユーザーはやっちゃいけないことをやりたがりますからね。 予期しないオーバーフローや、メモリ不足は、厄介物です。 そこまでは例外処理というものが存在する理由です。 しかし、実際に使われているのが少ないのは何故なのか。 そこが一番の疑問点です。 #1の方の回答では、多くの人に提供するライブラリ等であれば 使われているようではありますが・・・ やはり面倒というか、コストに見合わないのですかね。 どこかのサイトで見たような気がするのですが、 if文で処理するよりもcatchしたときに処理時間が何倍もかかるようですし、 速度を求める為にC言語系を使ってる人も多いので、 それも影響してるのでしょうか・・・。
- jacta
- ベストアンサー率26% (845/3158)
> 参考書や解説サイトにはよく載っている「例外処理(tryとかcatchとか)」を記述したソースを殆ど見ないのですが、 どんなソースを見たのでしょうか? 標準C++ライブラリやBoost C++ Librariesを使ったソース(および、それらライブラリ自体)を見れば、まともなプログラムなら例外処理を意識しているはずです。 > 例外処理は使わない方がいいのでしょうか? そんなことはありません。 しっかり使いこなせるようにしましょう。 特に、「例外安全」については重要の概念ですので、よく理解するようにしてください。
お礼
ご回答ありがとうございます。 >どんなソースを見たのでしょうか? 主にゲーム関係やWindowsAPIを使ったアプリのプログラムです。 色々なアルゴリズムやデータ管理方法が実装されていますので、 参考には重宝しています。 が、例外処理は殆ど見たことがありません。 標準ライブラリやBoostはまだ理解できるレベルに到達していないので見たことはないのですが、 Microsoftは速度よりもセキュリティを重視してるので、 その当たりが関係してるのでしょうかね・・・。 例外処理は使ってはいけないものみたいな認識があったのですが、 例外処理はする癖をつけた方がいいですよね。
お礼
プログラムの恐ろしいところは 想定外のエラーの発生によってバグが生まれることですからね。