プロが教える店舗&オフィスのセキュリティ対策術

C++にjavaのような例外処理ができるのを知りました
構文は

try
{
stat1
}
catch(except-decl)
{
stat2
}
finally
{
stat3
}
stat4

ただし
stat1:例外が発生する可能性があるステートメント
stat2:例外が発生したときに実行するステートメント
stat3:例外が発生しなくても実行するステートメント
stat4:ステートメント
except-decl:捕獲する例外の宣言
です

ここで質問です
(1)
冷害が発生したときstat4は実行されるのでしょうか?
されない場合にはその後どう言う処理がなされるのでしょうか?
(2)
except-declはどうのような記述がなされるのでしょうか?
(4)
例外を発生させる構文
throw except
(except:発生させる冷害)
のexceptの部分にはどのような記述がなされるのでしょうか?


よろしくお願いします

A 回答 (6件)

> 例外処理は主にデバッグのときだけに使われるのでしょうか?


> 怪しい処理は最終的にはつかわないようにすると思ったので気になります

いえいえ、その言葉どおり「例外的な処理を記述するため」のものです。

たとえば、普通はつながっているはずのマシンと通信するような処理で、たまたま相手が
メンテ中で止まっており通信ができない、って場合は、例外で処理するのがスマートです。

# 「怪しい処理」って、なんか、発想が面白い :-)

蛇足になりますが、No.5 の回答について。

layer13> それからもう一つ、JAVAが出てくる前からC++に例外処理は有ります。
layer13> C++が出来たのは1980年代ですからね。その辺りを勘違なさいませぬように。
layer13> #ANSI制定も1995年くらい?

c++ は 1980年代の前半からですが、最初は C のソースへのトランスレータとして
実装されました (cfront という)。
最初の頃は、例外も実装されていません。

ANSI C++ は、1997年の11月に採択され、正式に ISO に承認されたのは次の年の春か夏だったと思う。
    • good
    • 0

気になったのでちょっと調べてみました。


まず、C++の規格にfinallyは存在しません。これは他の方が
おっしゃっているように間違いないです。
ただし、Win32で実装されているCベースの構造化例外というものには
__finallyというものが存在するようです。要は、処理系(Windows)依存の
拡張ということですね。
おそらく、その本を書いた人がごちゃまぜにして理解せぬまま記述を
してしまったのではないかと思います。
念のため、プログラミング言語C++第二版(三版今ちょっと手元になし)
でも調べてみましたがfinallyという語句は出てきませんでした。

それからもう一つ、JAVAが出てくる前からC++に例外処理は有ります。
C++が出来たのは1980年代ですからね。その辺りを勘違なさいませぬように。
#ANSI制定も1995年くらい?

以上ご参考までに。
    • good
    • 0
この回答へのお礼

その辺りを勘違なさいませぬように。:
その心配はありません
javaがまだないときにC++を使ってましたから
いろいろ調べいてた抱いてありがとうございました

お礼日時:2002/11/22 23:26

> 数年前の本しか持っていないのでどこにもtryは乗っていないのです



でしたらもっと新しい文献をあたってください。

> std::runtime_errorの構文とstd::exceptionの構文を教えていただければ幸いです

ここですべてを解説するのは勘弁してください。

参考URL:http://www.comnets.rwth-aachen.de/doc/c++std/lib …
    • good
    • 0
この回答へのお礼

どうもありがとうございました

お礼日時:2002/11/22 23:16

> 私が借りてきたC++辞書にはfinallyが載っています


> 多分例外処理は新しく導入されたものでfinallyはさらに新しいもで規格化されたばかりかまた規格として認められていないのでは内科と思われます

変な本。

finally は、ANSI C++ の規格にはありません。

microsoft 拡張では、__try ~ __finally がありますが、あくまでも microsoft オリジナルです。

> try・・・の具体的な簡単プログラミング例を示していただければ幸いです

class FooException {
};

void foo()
{
  throw FooException();
}

void bar()
{
  try {
    foo();
  } catch (FooException& ex) {
    // ex を使えます
  }
}

java を知っているのであれば、違和感は無いですよね。
あなたが質問で書いたのとほとんど一緒です。
    • good
    • 0
この回答へのお礼

例外処理は主にデバッグのときだけに使われるのでしょうか?
怪しい処理は最終的にはつかわないようにすると思ったので気になります

よろしくお願いします

お礼日時:2002/11/21 22:49

>(1)冷害が発生したときstat4は実行されるのでしょうか?



実行されます。ちなみに、c++ には finally はありません。

>(2)except-declはどうのような記述がなされるのでしょうか?

java のように、

  catch (クラス名 &受取る変数名)

とできます。変数名の前の & はつけておいたほうがよろしい。

java と違って、

  catch (...)

という書き方ができます。全ての例外をキャッチし、かつ、例外のインスタンスが
必要ない場合です。java なら

  catch (Throwable th)

と書くのと一緒です。

>(4)例外を発生させる構文
>throw except
>(except:発生させる冷害)
>のexceptの部分にはどのような記述がなされるのでしょうか?

普通は、

  throw 例外のクラス(必要ならコンストラクタのパラメータ);

という書き方をします。java チックに

  throw new 例外のクラス(...);

とやると、catch した側で delete しなければならなくなりますので注意。


> C++にjavaのような例外処理ができるのを知りました

# 時の流れを感じます (^^;

この回答への補足

c++ には finally はありません。:

私が借りてきたC++辞書にはfinallyが載っています
多分例外処理は新しく導入されたものでfinallyはさらに新しいもで規格化されたばかりかまた規格として認められていないのでは内科と思われます

try・・・の具体的な簡単プログラミング例を示していただければ幸いです

よろしくお願いします

補足日時:2002/11/20 23:16
    • good
    • 0

(1) 実行されます


(2) catch ( std::exception& err ) // 例
(4) throw std::runtime_error("can't do it"); // 例


# ちゃんとした教科書を読んだほうがいいと思います。
    • good
    • 0
この回答へのお礼

数年前の本しか持っていないのでどこにもtryは乗っていないのです
tryは図書より借りたC++辞書ではじめてみました
その辞書には上記のような大雑把な構文しか載っていません

std::runtime_errorの構文とstd::exceptionの構文を教えていただければ幸いです

よろしくお願いします

お礼日時:2002/11/20 21:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!