作者: Tsutomu Hiroshima
日時: 2002/4/24(15:21)
From: 閑舎 <raku@...>
Subject: [TSfree:146] Re: C++ の catch & throw
Date: Wed, 24 Apr 2002 14:15:44 +0900 (JST)
Message-ID: <20020424141544P.raku@...>


> Cygwin DLL 1.3.10 に g++ version 2.95.3-5 にて、動作確認しました。どうも
> ありがとうございます。

いえいえ,間違った事ばっかり書いてしまってお恥ずかしい,
いろいろ試して私も勉強になりました.

void ThrowFunc() throw (char *) {
  const char *errstr = "Exception";
  throw errstr;
}

や,

void ThrowFunc() throw (char *) {
  throw 1;
}

だとコンパイルは通るけどダメです.

結局,throw の宣言と,
実際に throw するものが違ってもコンパイルは通るみたいです.
しかし,実行時にエラーになります.

教訓
1) "..." は const char * 型である.
2) C++ コンパイラは throw の型チェックはしない.

java ではメソッドが投げる可能性のある例外を全て
throws で宣言することになっているので,
コンパイル時に型チェックされますが,
C++ では宣言が必須でないので型チェックできないのでしょう.

> Cygwin で catch & throw を実行
> してみると、Segmentation Fault になったりします。

この実行時エラーはコンパイラによって
ちゃんと implement されたエラーなので,
Segmentation Fault とは異なるはずです.
Segmentation Fault は他の原因があるのではないかと...

-----------------------------
	廣島 勉
	(tsutomu@...)