うわー、キタネェコードだなw
953 :
仕様書無しさん:2011/02/06(日) 11:20:34
ぷぷぷぷぷーーーーーーーーーーーーーーーーーーーーー
ダサっ!!!!!!!!!!!!
デストラクタ使えばいいじゃねえか。お前C++知らんのか
954 :
仕様書無しさん:2011/02/06(日) 11:21:17
言語ごとのローカル仕様もしらんでよく例外語れるねw
955 :
仕様書無しさん:2011/02/06(日) 11:23:06
ノミの脳みそが猿を馬鹿にする図式に笑った
>>953 デストラクタはクラス終了時の処理
finallyは関数終了時の処理
この違いぐらい知ってください。
957 :
仕様書無しさん:2011/02/06(日) 11:42:28
>>956 知ってるよ。C++ではfinallyはないからデストラクタで処理するしかないだろう
958 :
仕様書無しさん:2011/02/06(日) 11:44:20
それに例外を搭載したOOでgotoつうのうもどうかね
べたCだったらエラー処理にgotoをばんばん使うけどねえ OOのプライドが
それを許さないだろう。お前の好きな例外でどうにかしろよ
959 :
仕様書無しさん:2011/02/06(日) 11:45:29
>>956はC++にfinallyが無いことをしらなかったようです
>>957 デストラクタは関数終了時に呼ばれないんだから
変わりに使うことはできません。
finallyならcatchの時にやればいい。
つかC++はOOPしてるとは限らんのだが・・・
962 :
仕様書無しさん:2011/02/06(日) 11:49:37
>>960 致命的エラーならばデストラクタでリソース廃棄して終了しないと
リークしちまうよ。君はOracleに吸収されたjavaをつかっているから
そんなこと考えなくても良いんだろうけどね
>>957 例外起きたらそのクラス死んでまうのん?
言語では規定されて無いけど、実装されてる。
VC++、BCB、gccの全部でfinallyはあるよ。
965 :
仕様書無しさん:2011/02/06(日) 11:51:00
>>961 OOPしないのならべたCのほうが効率がいいよ
OOと例外は直接関係しないのだが...
現代的な例外やcall/CCはLISP系だよな
968 :
仕様書無しさん:2011/02/06(日) 12:04:26
>>951 俺は猿でよくわからん。以下の間違いをなぜ間違いなのか
猿の俺にもわかるように説明してください。おねがいします
void some_func(){
try{//...}
//このキャッチハンドラは間違いだそうだ
catch(void*){...}
catch(ArrayErr &){...}
catch(RangeErr &){...}
catch(const char *){...}
catch(void (*pf)(const char*)){...}
}
969 :
仕様書無しさん:2011/02/06(日) 12:06:51
>>964 俺のもっているC++プライマーにもそんなこと全く記述されてない
こまったね第2版だからいかんのかなw
>>968 「間違いだそうだ」とか言われても何が間違いなのかわからない
単によくある独自拡張なだけだろ。
あとデストラクタ云々は、ファンクタみたいなの使うってことであってんの?
C++あんまり使ってないし、なんかバッドノウハウな気がして自信無い。
以下、このスレはgotoを正しく使えないプログラマ多いねスレになりました
975 :
仕様書無しさん:2011/02/06(日) 12:39:08
例外を正しく使うためにはRAIIが必須ってこと?
979 :
仕様書無しさん:2011/02/06(日) 12:44:08
>>974 早く解決してくれよ、このスレの神様、俺猿だからもやもやして
気持ちわるいっす
今MSの昔のマニュアル読んでいたら笑った
キーワード
try*8
catch*8
*8 Microsoft C/C++バージョン7.0では実装されていません
だって
VC++1.0から実装されたのかな
981 :
仕様書無しさん:2011/02/06(日) 12:47:54
>>980 直訳日本語で意味不明でわからんのよ、神様のあなたにぜひお願いします
>>981 俺は神だとか名乗ったことないんだけどな。
それに、パッと見ただけじゃ分からんよ。
間違いってのは、コンパイルが通らないってことでOK?
それとも、コンパイルは通るけど良くない書き方ってこと?
>>983 その質問に答えたとして、
お前は適切なことを言えるのか?
適切ことが何かを知っていれば、
コンパイルが通らないのか良くない書き方なのか
聞くまでもなくわかるだろ?
>>985 そこまで解ってるんだったら
983の代わりに解説してあげれヴぁ?
988 :
仕様書無しさん:2011/02/06(日) 13:26:24
>>983 コンパイルは俺もしてないし未確認だけど
よくない(問題のある)書き方らしいが、その意味が知りたい。
きちんと理解できないと、神のように例外をつかいこなせないじゃない。
だからがんばって猿なりに理解します。よろしくお願いします。
989 :
仕様書無しさん:2011/02/06(日) 13:30:23
>>985という優秀な方が登場しましたが、俺はやっぱり神さまにおねがいしたいです
990 :
仕様書無しさん:2011/02/06(日) 13:34:02
そして予想どおりスレの流れがフルgcでかたまりつつあります
これ、throw "プギャーーー!";ってやるとどこでキャッチされるの?
>>991 throwする側はどこでキャッチするかを考えてはいけない。
throwする側は異常事態が起きたことを親関数に返すだけ。
throwされた例外はその例外に興味がある人。
つまりその例外を処理したい、処理できる人が
キャッチする。
>>992 そゆ意味じゃなくてだな
void some_func(){
try{
throw "プギャーー!"
}
//このキャッチハンドラは間違いだそうだ
catch(void*){...}
catch(ArrayErr &){...}
catch(RangeErr &){...}
catch(const char *){...}
catch(void (*pf)(const char*)){...}
}
で、キャッチされる場所は
catch(void*){...}
catch(const char *){...}
のどっちよ? どっちでもキャッチできるぞ。
だから、どっちに行くかが曖昧であまりよろしくないキャッチ句なんじゃねーの?
先に書いた方に決まってるだろ・・・
>>993 void*がExceptionの代わりになるみたいな勘違いしてないか?
(void*)でキャストしないかぎりchar*がvoid*でキャッチされるなんてありえないよ。
>>993がヒントを述べていますね
どのポインタ例外も標準変換を適用することで void*と称号するらしいです
プライマー二版の時点では警告を出すべきと書いてありますがおそらく
VS2008とかg++ではでるのかな?
997 :
仕様書無しさん:2011/02/06(日) 14:11:28
ああ、スレ終了までに解決してよかった~
これで尻切れのよいうんこのようにすっきりと終われますね
999 :
仕様書無しさん:2011/02/06(日) 14:15:05
プライマーによる正解の並びだそうです
void some_func(){
try{
throw "プギャーー!"
}
//このキャッチハンドラは間違いだそうだ
catch(const char *){...}
catch(void (*pf)(const char*)){...}
catch(void*){...}
catch(ArrayErr &){...}
catch(RangeErr &){...}
1000
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。