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の部分にはどのような記述がなされるのでしょうか?
よろしくお願いします
No.6ベストアンサー
- 回答日時:
> 例外処理は主にデバッグのときだけに使われるのでしょうか?
> 怪しい処理は最終的にはつかわないようにすると思ったので気になります
いえいえ、その言葉どおり「例外的な処理を記述するため」のものです。
たとえば、普通はつながっているはずのマシンと通信するような処理で、たまたま相手が
メンテ中で止まっており通信ができない、って場合は、例外で処理するのがスマートです。
# 「怪しい処理」って、なんか、発想が面白い :-)
蛇足になりますが、No.5 の回答について。
layer13> それからもう一つ、JAVAが出てくる前からC++に例外処理は有ります。
layer13> C++が出来たのは1980年代ですからね。その辺りを勘違なさいませぬように。
layer13> #ANSI制定も1995年くらい?
c++ は 1980年代の前半からですが、最初は C のソースへのトランスレータとして
実装されました (cfront という)。
最初の頃は、例外も実装されていません。
ANSI C++ は、1997年の11月に採択され、正式に ISO に承認されたのは次の年の春か夏だったと思う。
No.5
- 回答日時:
気になったのでちょっと調べてみました。
まず、C++の規格にfinallyは存在しません。これは他の方が
おっしゃっているように間違いないです。
ただし、Win32で実装されているCベースの構造化例外というものには
__finallyというものが存在するようです。要は、処理系(Windows)依存の
拡張ということですね。
おそらく、その本を書いた人がごちゃまぜにして理解せぬまま記述を
してしまったのではないかと思います。
念のため、プログラミング言語C++第二版(三版今ちょっと手元になし)
でも調べてみましたがfinallyという語句は出てきませんでした。
それからもう一つ、JAVAが出てくる前からC++に例外処理は有ります。
C++が出来たのは1980年代ですからね。その辺りを勘違なさいませぬように。
#ANSI制定も1995年くらい?
以上ご参考までに。
その辺りを勘違なさいませぬように。:
その心配はありません
javaがまだないときにC++を使ってましたから
いろいろ調べいてた抱いてありがとうございました
No.4
- 回答日時:
> 数年前の本しか持っていないのでどこにもtryは乗っていないのです
でしたらもっと新しい文献をあたってください。
> std::runtime_errorの構文とstd::exceptionの構文を教えていただければ幸いです
ここですべてを解説するのは勘弁してください。
参考URL:http://www.comnets.rwth-aachen.de/doc/c++std/lib …
No.3
- 回答日時:
> 私が借りてきた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 を知っているのであれば、違和感は無いですよね。
あなたが質問で書いたのとほとんど一緒です。
例外処理は主にデバッグのときだけに使われるのでしょうか?
怪しい処理は最終的にはつかわないようにすると思ったので気になります
よろしくお願いします
No.2
- 回答日時:
>(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・・・の具体的な簡単プログラミング例を示していただければ幸いです
よろしくお願いします
No.1
- 回答日時:
(1) 実行されます
(2) catch ( std::exception& err ) // 例
(4) throw std::runtime_error("can't do it"); // 例
# ちゃんとした教科書を読んだほうがいいと思います。
数年前の本しか持っていないのでどこにもtryは乗っていないのです
tryは図書より借りたC++辞書ではじめてみました
その辞書には上記のような大雑把な構文しか載っていません
std::runtime_errorの構文とstd::exceptionの構文を教えていただければ幸いです
よろしくお願いします
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Ruby 初心者 パイソンプログラム 2 2022/05/30 07:34
- 哲学 Humility is ... appearance.の一番古い出典となる書物は何で著者は誰ですか? 11 2022/04/21 03:19
- 計算機科学 急ぎです、大学数学再帰の問題難しくてがわからないです。 以下の4つの文字列を連結して新たに生成できる 1 2023/05/17 20:11
- ドイツ語 提示の名言の文の構造について 2 2022/11/11 13:00
- 英語 提示文の"hence"の前にピリオドがない理由と文の構造について 8 2022/03/24 10:48
- 哲学 日本語は 言語類型として あたかも始原のごとくである 3 2022/05/29 04:41
- その他(ソフトウェア) ソフトが異常終了します 1 2022/08/28 01:41
- その他(自然科学) 直流モータのω-τ曲線につきまして 1 2022/09/10 18:46
- 環境・エネルギー資源 電力の自由化 14 2022/10/14 15:36
- 政治 徴兵逃れのロシア人がボートピープルに成って日本に押し寄せて来ますか? 6 2022/09/30 11:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
String型の日付(2005/11/25)の...
-
C# マルチスレッドにおける例外...
-
VBA Evaluate関数 型が一致しま...
-
子プロセスで発生した例外を親...
-
ブックマークレットについて
-
nullで、return出来るのはどん...
-
例外ってIf文の中に入れますか...
-
C++の例外処理について
-
【JAVA】与えられた金額を貨幣...
-
PHPのpack関数をJavaで実装でき...
-
全角スペースのチェックについて
-
「タイプ初期化子が例外をスロ...
-
オープンアプリにおける、テキ...
-
エクセルVBAで、条件に一致する...
-
3年間同じクラスになる確率
-
インスタンス参照でアクセスで...
-
c++,ある関数のクラスから別の...
-
ワイルドカード<?>と型パラメー...
-
「天声人語」をインターネット...
-
DataGridViewでセルクリックイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「タイプ初期化子が例外をスロ...
-
【JAVA】与えられた金額を貨幣...
-
連続する「\\」をひとつの「\\...
-
文字列からダブルクオートの削除
-
VB.Net Object型 空かどうか
-
0除算の例外処理ができない!!...
-
VB.NETで16進数が正しいかどう...
-
数字か文字列かを判定する関数
-
例外ってIf文の中に入れますか...
-
C# マルチスレッドにおける例外...
-
スタックオーバーフローとは?
-
String型の日付(2005/11/25)の...
-
Timestamp型への変換について(J...
-
C# UriFormatExceptionの回避
-
VBA Evaluate関数 型が一致しま...
-
ADOによるレコードの追加/更新
-
時間の取得
-
WebClient()以外でネットにアク...
-
C#の捕捉されない例外処理の対...
-
タトゥーや墨を入れる人の共通点
おすすめ情報