■過去ログ置き場に戻る■
1-
前250
次250
最新50
[memo]
"9999999999_00.html#R20"
という感じで、URLの最後に "#R
レスNo
" を追加すると幸せになれます。
C++相談室 part33
501
名前:
main.cpp
:04/08/04 08:56
#include <exception>
#include <iostream>
#include "boost/timer.hpp"
void func_throws_exception();
void operation(int);
void try_in_loop(int counter_end)
{
for (int counter = 0; counter < counter_end; ++counter)
{
try { func_throws_exception(); }
catch (std::exception const& e) { operation(counter); }
}
}
void try_outof_loop(int counter_end)
{
int counter = 0;
CONTINUE:
try { for (; counter < counter_end; ++counter) func_throws_exception(); }
catch (std::exception const& e) { operation(counter); goto CONTINUE; }
}
int main()
{
int const counter_end = 1000 * 1000 * 1000;
boost::timer t;
t.restart(); try_in_loop(counter_end); double const in_loop = t.elapsed();
t.restart(); try_outof_loop(counter_end); double const outof_loop = t.elapsed();
std::cout
<< "try_in_loop : " << in_loop << '\n'
<< "try_outof_loop: " << outof_loop << std::endl;
return 0;
}
502
名前:
sub.cpp
:04/08/04 08:56
void func_throws_exception(){}
void operation(int){}
503
名前:
g++ (GCC) 3.3.1 (cygming special)
:04/08/04 09:01
$ g++ -O3 main.cpp sub.cpp && ./a.exe
try_in_loop : 20.329
try_outof_loop: 21.04
504
名前:
デフォルトの名無しさん
:04/08/04 09:03
>>493
だとスタックが死ぬので
>>484
がお勧め
>>501
は論外
505
名前:
デフォルトの名無しさん
:04/08/04 09:05
>>504
再帰は遅いしね
506
名前:
501-503
:04/08/04 09:07
gccならtryのオーバーヘッドはほとんど除去できている模様。
>>468
が実測無しで「try {} catch() {} のオーバーヘッドの所為で」と言っている可能性もある。
507
名前:
501-504
:04/08/04 09:08
>>504
あれ?もしかして、なんか処理間違ってる?
508
名前:
デフォルトの名無しさん
:04/08/04 09:09
>>506
gccならって時点で本題から外れてるじゃん。
try,catchのプロローグコードとエピローグコードが重い事を前提に議論してるんだし。
509
名前:
501
:04/08/04 09:19
あ、カウンタが進んでないな。 goto の前に ++counter; を入れないと処理が違う。
>>508
重い処理系での計測結果きぼん。
510
名前:
デフォルトの名無しさん
:04/08/04 09:37
Borland C++ 5.6.4(BCB6)
bcc32 -O2
try_in_loop : 31.55
try_outof_loop: 14.62
511
名前:
デフォルトの名無しさん
:04/08/04 09:40
少なくともC++では、例外に関しては実行速度は全く考慮されていないからなあ。
512
名前:
デフォルトの名無しさん
:04/08/04 09:47
>>510
もっと重い処理系も多そうだね
513
名前:
デフォルトの名無しさん
:04/08/04 09:49
VC++7.1
cl -O2
try_in_loop : 0
try_outof_loop: 0
やっぱVC++の最適化は格が違うね
514
名前:
デフォルトの名無しさん
:04/08/04 09:59
>>513
別ファイルに分けても消されるのか?すげえな。
sub.cpp を以下に変更して追試してみてほしい。
volatile int n;
void func_throws_exception(){++n;}
void operation(int){n=0;}
515
名前:
デフォルトの名無しさん
:04/08/04 10:08
>>514
それじゃ throw() と解釈されるかもしれないから、
void func_throws_exception(){++n;if(n<0)throw n;}
くらい入れといたほうがいいかも。
516
名前:
デフォルトの名無しさん
:04/08/04 10:08
>>514
try_in_loop : 0.43
try_outof_loop: 0.441
517
名前:
515
:04/08/04 10:10
catch(std::exception const&) だから、throw std::exception() にしないといけないな。
518
名前:
デフォルトの名無しさん
:04/08/04 10:19
VC++7.1
cl -O2 -GX
一応さっきのも-GXは全部付けてるんで
try_in_loop : 13.669
try_outof_loop: 14.751
try_outof_loop2: 8.597
void func_throws_exception()
{
static int i=0;
if(++i % 4096 == 0)
throw std::exception();
}
void try_outof_loop2(int counter_end)
{
int counter = 0;
while(counter < counter_end)
{
try { for (; counter < counter_end; ++counter) func_throws_exception(); }
catch (std::exception const& e) { operation(counter); ++counter; }
}
}
519
名前:
デフォルトの名無しさん
:04/08/04 11:25
>>518
その try_outof_loop2 を参考にして、以下のようなものを思いついた。
void loop_in_try(int counter_end)
{
for (int counter = 0; counter < counter_end; ++counter)
{
// ループ内での try によるオーバーヘッドを軽減するため、 try の中でも同じ条件でループします
try { do func_throws_exception(); while (++counter < counter_end); break; }
catch (std::exception const& e) { operation(counter); }
}
}
オリジナル(try_in_loop)からの変更箇所も少なく、見た目のキモさをフォローするコメント付き。
>>468
への答えとしてはこれが適切と思う。
520
名前:
デフォルトの名無しさん
:04/08/04 11:42
>>505
今回のケースだと
>>484
の方が遅いはず
521
名前:
デフォルトの名無しさん
:04/08/04 11:57
std::nth_element(vec.begin(), vec.begin(), vec.end(), HogeComparator());
最も条件に適合する要素を先頭に持ってくるコードですが、
これより良い方法はありますか?
あったら教えて下さい。
522
名前:
デフォルトの名無しさん
:04/08/04 12:01
何かを勘違いしちゃってるな
523
名前:
デフォルトの名無しさん
:04/08/04 12:12
とりあえず
std::partial_sort(vec.begin(), vec.begin(), vec.end(), HogeComparator());
よりはnth_elementの方が速いと思うのですが。
先頭に来て欲しい要素が1個なので結果は同じですよね?
524
名前:
デフォルトの名無しさん
:04/08/04 12:49
>>523
定義だと、nth番目を境に[first,nth)のどの要素も[nth,last)より小さくなるように並び替えるってことなので、
vec.begin(), vec.begin() はダメでしょう(特定の実装でどうなってるかは知りません)。
サイズが1以上かどうかを確かめた上で、
std::nth_element(vec.begin(), vec.begin()+1, vec.end(), HogeComparator());
の方が良いと思う。
525
名前:
524
:04/08/04 12:50
あ、ごめん。ダメじゃないかも。
526
名前:
デフォルトの名無しさん
:04/08/04 13:21
>>489
まじかよ。
MFCのCFileでファイルクラスの例外スローに苦しめられた経験があるもんで、
.NETでも例外スローするってのは正直ひくね。
ファイル操作のような、アプリ依存の分岐処理が必須になる分野に
例外機構が向いているかどうか疑問だ。
527
名前:
デフォルトの名無しさん
:04/08/04 13:26
>>405
gotoもそうだし、ダウンキャストしまくりでびびったよ
ゲームだからいいのかね
528
名前:
デフォルトの名無しさん
:04/08/04 13:38
C++の落とし穴とは、普通はどういう物を指しますか?
オブジェクトコピーによってデストラクタが二度呼び出されたり、
ポインタ位置破壊を行ってしまうような事を指すんでしょうか?
529
名前:
デフォルトの名無しさん
:04/08/04 13:48
>>521
std::swap(*std::max_element(vec.begin(), vec.end(), HogeComparator()), vec.front());
ではどう?
530
名前:
デフォルトの名無しさん
:04/08/04 14:17
>>527
ハンガリアンも使いまくり
531
名前:
デフォルトの名無しさん
:04/08/04 14:24
>>526
へぇ。
私の場合、標準の fstream 関係がデフォルトでは例外を投げないことの方が気持ち悪いです。
ファイル関連こそ、例外を使った方が楽だと思うんだけど。
532
名前:
デフォルトの名無しさん
:04/08/04 14:42
>>527
ゲームとか関係ないかと…
単にスタイルの問題?
533
名前:
デフォルトの名無しさん
:04/08/04 14:50
>527
やる着なかったんだよ.
534
名前:
デフォルトの名無しさん
:04/08/04 15:44
>>532
ゲーム > 速度重視 > 実行時型チェックなんかしてられるか(ノ `Д´)ノ ミ _I___I_
じゃない?
535
名前:
デフォルトの名無しさん
:04/08/04 15:46
C++を基礎から勉強しています。
質問なのですが、
http://wisdom.sakura.ne.jp/programming/cpp/cpp12.html
このページにある"オブジェクトを返す"のサンプルでは、関数内で定義した
オブジェクトを関数の返り値として返しています。
これは、
http://www.cmagazine.jp/src/kinjite/c/variable.html#index17
【自動変数をポイントして,それを関数の戻り値にする】
に該当するのではないでしょうか?これはC++ではやっても良い事なのですか?
よろしくお願いします。
536
名前:
デフォルトの名無しさん
:04/08/04 15:47
>>531
釣り?
自分のエラー処理(任意)とクラス例外処理(強制)で2度手間。
ファイルの例外を楽と思うヤシの気が知れんね。経験浅いの?
537
名前:
535
:04/08/04 15:50
関数内で定義→関数内で宣言、でした。
538
名前:
デフォルトの名無しさん
:04/08/04 15:52
>>534
でも dynamic_cast は…
ひょっとしたら、HDR がどうとか、そういうアルゴリズムを他の事に
気が紛らわされることなく理解してもらためにやってるのかも…
539
名前:
デフォルトの名無しさん
:04/08/04 15:53
>>535
> 戻り値として生成したオブジェクトの複製を返して終了します
複製を返しているので
>【自動変数をポイントして,それを関数の戻り値にする】
には当たりません.該当するのは以下のような場合です.
Kitty *getKitty(char *str) {
Kitty *obj (new Kitty ());
obj->str = str;
return obj;
}
540
名前:
539
:04/08/04 15:55
>>539
ボケけてた.該当するのは,
Kitty *getKitty(char *str) {
Kitty obj Kitty ())
obj.str = str;
return &obj;
}
です.
541
名前:
デフォルトの名無しさん
:04/08/04 15:55
>>530
つーか元祖ハンガリアン勤務先なので ドゾー( ´∀`)つ
542
名前:
デフォルトの名無しさん
:04/08/04 15:55
>>535
int func()
{
int a = 1;
return a;
}
と同じこと。
戻り値として返されるのは関数内の自動変数をコピーしたもの。
543
名前:
デフォルトの名無しさん
:04/08/04 15:56
ローカルの参照やポインタを返すなってことさ
544
名前:
デフォルトの名無しさん
:04/08/04 15:57
>>535
C-Magazineが間違っているだけ。
545
名前:
539
:04/08/04 15:57
何度もすんません.540は
- Kitty obj Kitty ())
+ Kitty obj;
に訂正致します.
546
名前:
デフォルトの名無しさん
:04/08/04 16:05
どうでもいいけど
>>535
のリンク先
while(NULL != thePtr){
ってやってる。宗教健在かぁ。
547
名前:
デフォルトの名無しさん
:04/08/04 16:06
害の無い宗教は放置。
548
名前:
535
:04/08/04 16:11
解説ありがとうございます。return時に指定された変数(や定数)を
スタックにコピーした上でretするということなのでしょうか。
何にしてもC・C++に関係なく自分が勘違いしていたようです。
-S出力したりしてもう少し勉強しようと思います。
549
名前:
デフォルトの名無しさん
:04/08/04 16:11
>>547
見難いだろ。
550
名前:
デフォルトの名無しさん
:04/08/04 16:11
>>547
その通り。
変数・定数の頭文字を大文字にされた日にゃ、困るけど。
551
名前:
デフォルトの名無しさん
:04/08/04 16:17
>>536
うーん。経験浅いのかも。計算系が主だし。
自分のエラー処理とクラスの例外処理を「まとめて」扱えるから楽かなと思って。
今は、
std::ifstream ifs(filename);
if (!ifs)
throw Hoge();
とかやってる。そうすると catch を一カ所にまとめてかけて楽だし。
ヘボい?どうやるのがかっこいいのかな?
552
名前:
デフォルトの名無しさん
:04/08/04 16:30
>>551
自分の投げたいときだけ投げるわけじゃねーだろ、ライブラリの例外クラス。
お前の書いたサンプルは、任意使用の例外処理だろが。
経験が浅いだけでなく、日本語も不自由なのか?
553
名前:
デフォルトの名無しさん
:04/08/04 16:35
>>552
>>551
は強制処理の例外をstd::ifstreamが投げないから仕方無く任意処理の例外を書いてるんじゃないのか?
554
名前:
553
:04/08/04 16:35
任意処理->任意使用
555
名前:
デフォルトの名無しさん
:04/08/04 16:40
>>553
自分でthrowしている時点で、論点が違うでしょ。
今問題にしているのは、クラス内部から勝手にthrowするファイルクラスの利便性について。
556
名前:
デフォルトの名無しさん
:04/08/04 16:51
>>552
ごめん。日本語が不自由なのは認めるけど、言いたいのは
>>553
がフォローしてくれた通り。
「クラス内部から勝手に」ってのが、よくわからないけど……。
普通、例外ってメソッドから勝手に投げられてくるものじゃないの?
557
名前:
デフォルトの名無しさん
:04/08/04 17:00
おまいらー。はなしがかみあってないぞー。
558
名前:
デフォルトの名無しさん
:04/08/04 17:10
>>556
とりあえず、メソッドから直接投げられると困ることがあるってことに気付けよ。
計算系って、大学か?
どうせ、exit()乱用するアフォプログラム書いてんだろ?
559
名前:
デフォルトの名無しさん
:04/08/04 17:12
>メソッドから直接投げられると困る
std::bad_alloc投げない化石コンパイラでも使ってて下さい
560
名前:
デフォルトの名無しさん
:04/08/04 17:15
>>558
そのための例外だろ?
561
名前:
531=551=556
:04/08/04 17:23
>>556
え?すみません。全然わからなくなってしまいました。
「メソッドから直接投げられると困ることがある」ことに、どうしても気づけません。
私の主張(というほどじゃないけど)「メソッドから直接例外を投げてくれないと面倒くさい。」です。
556さんじゃなくても構いませんので、556さんがどういうことを言いたいのか解説してもらえませんか?
日本語不自由ですみません……orz
562
名前:
デフォルトの名無しさん
:04/08/04 17:24
>>561
すみません。556は自分でした。558さんですね。
563
名前:
デフォルトの名無しさん
:04/08/04 17:25
例外処理に関して知った風なこと言ってるヤシ、
「自分で作った」例外を投げるクラスぐらいしか使ってないだろ。
完全に自己満足の世界といっていい。
他人に使われることを想定してクラスを作ったら、
クラス内部からスローするような仕様は下の下だということに気付けるはずだ。
564
名前:
デフォルトの名無しさん
:04/08/04 17:26
>>563
俺も、こいつが何を言いたいのかさっぱりわからん。
newを使うな、ってことを言いたいのか?
565
名前:
デフォルトの名無しさん
:04/08/04 17:28
C++ で new を使わないのはある意味尊敬するなw
566
名前:
デフォルトの名無しさん
:04/08/04 17:29
>>563
主張は分かったから、良かったら根拠を挙げて紅か?
567
名前:
デフォルトの名無しさん
:04/08/04 17:29
>>563
568
名前:
デフォルトの名無しさん
:04/08/04 17:29
関数から例外を投げないほうがいいと言っている人は
ライブラリは戻り値でエラーかどうかを毎回返したほうが良い
と言っているのですか?
569
名前:
デフォルトの名無しさん
:04/08/04 17:30
newどころかSTL全般が駄目なのでは。
570
名前:
デフォルトの名無しさん
:04/08/04 17:30
何のためのC++なんだろうな(w
571
名前:
デフォルトの名無しさん
:04/08/04 17:31
>>563
心から同意
誰か意地になってるやつがいるだけの気がする
実際は作るときより、使うとき困るんだがな
572
名前:
デフォルトの名無しさん
:04/08/04 17:31
昔の人は偉いよね。例外なんかなくてもちゃんと作ってたんだから。
今同じことしようとするとめんどくさくて仕方ない。
573
名前:
デフォルトの名無しさん
:04/08/04 17:31
つーかクラス内部ってどこだよ。
574
名前:
デフォルトの名無しさん
:04/08/04 17:32
>>563
はきっと大域newオーバーロードしてあるし、
STLは全部自分で書いてる。
575
名前:
デフォルトの名無しさん
:04/08/04 17:33
いくらなんでも一気にこれだけレスが憑くのはありえないな…
576
名前:
デフォルトの名無しさん
:04/08/04 17:33
563 == 571 ?
どっちでもいいから
早 く 具 体 例 を 挙 げ ろ
577
名前:
デフォルトの名無しさん
:04/08/04 17:33
発生したエラーが致命的かどうか判断するのは、
クラス利用者であってクラス作成者ではない。
クラスに例外処理を実装して得意気になる馬鹿はPGをやめた方がいい。
578
名前:
デフォルトの名無しさん
:04/08/04 17:34
>>563
は例外安全
579
名前:
デフォルトの名無しさん
:04/08/04 17:34
>>577
是非C++標準委員会のSTL策定したメンバーの方々のメールでも送りつけて下さい
580
名前:
デフォルトの名無しさん
:04/08/04 17:35
>>563
はthrow()の男
581
名前:
デフォルトの名無しさん
:04/08/04 17:36
564から自演の嵐
582
名前:
デフォルトの名無しさん
:04/08/04 17:38
例外投げられても、それが致命的じゃないなら
catchして処理して正常系に戻ればいいのではないのか?
583
名前:
デフォルトの名無しさん
:04/08/04 17:38
>>563
はtry,catch構文の書き方が分からない
584
名前:
デフォルトの名無しさん
:04/08/04 17:39
>>577
別に致命的じゃなくても例外投げて良いと思うぞ。
要は、処理を続行できない事態が発生した時に投げれば良い。
致命的かどうか判断するのは
>>577
の言うように利用者だから、
tryの位置やcatchの内容にそれを反映させる。
585
名前:
デフォルトの名無しさん
:04/08/04 17:40
>>563
の戻り値はいつもint
586
名前:
デフォルトの名無しさん
:04/08/04 17:41
>>563
はGetLastErrorマニア
587
名前:
デフォルトの名無しさん
:04/08/04 17:42
自演もうざいが、煽りもうざい。
議論に参加しない奴は黙ってろ。
588
名前:
デフォルトの名無しさん
:04/08/04 17:43
低レベルすぎるのでageときますね
589
名前:
デフォルトの名無しさん
:04/08/04 17:44
>>563
さんがどうやってエラーを返してるのか知りたいです。
やっぱ返り値は全部intかenumですか?
それともエラーの時はNULLとか返してGetLastError機構を用意するのですか?
590
名前:
デフォルトの名無しさん
:04/08/04 17:45
スレ立てて他でやれ
>>587
煽りが自演だろ
591
名前:
デフォルトの名無しさん
:04/08/04 17:47
>>589
は!ひょっとして
>>563
の方が釣りなのか。そんな餌に...クマー
592
名前:
デフォルトの名無しさん
:04/08/04 17:47
>>576
とりあえず、MFCのCFileやCInternetSessionなどを使ってプログラムを組め。
CException系例外クラスをキャッチするプログラムだ。
サンプルを示したところで、それはちゃんと動くし動作確認されたものだ。
それでは煩雑さを説明したことにならない。わかるだろ?
MS様の作った仕様を逐一追いかける意味で、自力でサンプルプログラムを組め。
いかにクラスの例外スロー機構が煩わしいかが実体験できる。
593
名前:
デフォルトの名無しさん
:04/08/04 17:48
>>563
==592さん
>>589
594
名前:
デフォルトの名無しさん
:04/08/04 17:50
どう煩わしくなったかは教えてくれないのね。
595
名前:
デフォルトの名無しさん
:04/08/04 17:50
>>591
気づいてしまったね。うまくやられたっぽいよね。
596
名前:
デフォルトの名無しさん
:04/08/04 17:51
>>563
さんは自分でクラス書いた事無いんですか?
597
名前:
デフォルトの名無しさん
:04/08/04 17:52
>>584
>tryの位置やcatchの内容にそれを反映させる。
多くの場合、スコープがcatchに移動していて、エラーの原因となったデータは消滅している。
エラー番号が判る程度では、役不足だった経験はあるだろ?
598
名前:
デフォルトの名無しさん
:04/08/04 17:52
例外禁止だとRAIIが達成できないな。
無効状態のオブジェクトを作りたくないときどーすんだ?
599
名前:
デフォルトの名無しさん
:04/08/04 17:54
>>563
==597さん
例外ならエラー番号以上の事が分かりますよ。
600
名前:
デフォルトの名無しさん
:04/08/04 17:54
このスレは以後
>>597
の役不足につっこむスレとなります
601
名前:
デフォルトの名無しさん
:04/08/04 17:54
一体何人が
>>563
を演じているんだ
602
名前:
デフォルトの名無しさん
:04/08/04 17:56
>>601
563は一人だろ
粘着が自演
603
名前:
デフォルトの名無しさん
:04/08/04 17:58
>>563
は結局何が言いたいのか分からないのですが。
結局tryとかcatch書くのが面倒なだけなんですか?
604
名前:
デフォルトの名無しさん
:04/08/04 17:59
>>597
消滅させるかどうか選ぶのはtry/catchを書いたプログラマ自身じゃないか?
投げられた例外について多くを知りたければ
呼び出しの深いところで(throwに近いところで)catchすればいい。
605
名前:
デフォルトの名無しさん
:04/08/04 18:00
>>599
サンプルを示して。
606
名前:
デフォルトの名無しさん
:04/08/04 18:00
例外はエラー以外には使うな、という考えでもないんだよな。
主張がよくわかんね。
607
名前:
デフォルトの名無しさん
:04/08/04 18:00
>>597
そのために例外クラスを作るんじゃないの?
自作クラスでは、全部 exception とか投げてるから
そーいうことで困るんだとおもうよ。
608
名前:
デフォルトの名無しさん
:04/08/04 18:00
>>605
std::exception
と、563のまねをしてみるテスト。
609
名前:
デフォルトの名無しさん
:04/08/04 18:00
>>563
は例外クラスを定義しているライブラリは使いません。
IndyとかMFCとかSTLとかboostとか。
610
名前:
デフォルトの名無しさん
:04/08/04 18:01
例外が駄目だということなのですが、
どうするのが良いスタイルなのかを示してくれたほうが嬉しいです。
自分が提供するライブラリクラスで例外使用を禁じられた場合
1. 関数からintやenumの戻り値を返す。
2. エラー情報格納部を用意してGetLastErrorのようなことをする。
のような解決を試みると思います。
1や2のようにしているのか、それとももっと良い方法なのか
示していただけ無いでしょうか。
611
名前:
デフォルトの名無しさん
:04/08/04 18:02
>>605
サンプルも何も、
例外クラス定義してエラー番号以上の情報を入れるだけなんですけど…
612
名前:
デフォルトの名無しさん
:04/08/04 18:03
>>604
信者の詭弁ですよ。
×呼び出しの深いところで(throwに近いところで)catchすればいい。
○呼び出しの深いところで(throwに近いところで)catchしなければならない。
613
名前:
デフォルトの名無しさん
:04/08/04 18:03
もういいんじゃない。
>>563
は例外クラスが分かってないでFAで。
スレの無駄。
614
名前:
デフォルトの名無しさん
:04/08/04 18:03
>>604
恐らくライブラリ関数内で作られたようなオブジェクトの情報を
取得できないことを指摘しているのだと思う。
ライブラリ作成者側が気を使ってくれるなら、
例外クラスの中にその情報を入れてくれるんだけどね。
615
名前:
デフォルトの名無しさん
:04/08/04 18:05
>ライブラリ関数内で作られたようなオブジェクトの情報を取得
良く意味分からないんですけど、例外じゃくて戻り値ベースだと
それが分かるんですか?
そもそもライブラリ関数内で作られたようなオブジェクトの情報を取得するのは
カプセル化と相反していませんか?
616
名前:
デフォルトの名無しさん
:04/08/04 18:05
ちょっと相互リンクしておきますね。
http://pc5.2ch.net/test/read.cgi/tech/1068302657/
617
名前:
デフォルトの名無しさん
:04/08/04 18:06
>>563
はここで勉強してきたら?
例外処理exception, runtime_errorの使い方
http://pc5.2ch.net/test/read.cgi/tech/1051690231/
618
名前:
デフォルトの名無しさん
:04/08/04 18:08
>>617
そこの8=468
619
名前:
デフォルトの名無しさん
:04/08/04 18:08
>>563
のようなバカにエラー処理を強制させる意味でも例外を使うべきだ。
>>563
は戻り値ベースだったら戻り値なんてチェックしないだろう。間違いない。
もっとも
>>563
のようなヴァカは全部tryで囲んでcatch(...){}で終わりだろうけど。
620
名前:
デフォルトの名無しさん
:04/08/04 18:09
>>615
いや、俺も例外推奨派なので、戻り値ベースだとできるとか
そういう意味の発言はしていないよ。
>>614
にもそうは書いてないよね。
必要な情報を入れてくれていない「例外を投げる側の不備」が
あることもあるよねって話。
ライブラリ関数内で一時的に生成されて
関数内で一生を終えるような情報を例外クラスに入れて投げるのって
カプセル化に反するの?別にメンバ変数の内容を公開するわけじゃないよ。
621
名前:
デフォルトの名無しさん
:04/08/04 18:12
>>610
それで十分。
622
名前:
デフォルトの名無しさん
:04/08/04 18:15
>>619
逆だな。
戻り値を厳密にチェックしてエラー時の処理を細かく制御したい場合、強制スローは迷惑。
623
名前:
デフォルトの名無しさん
:04/08/04 18:16
>>621
なるほど。じゃぁ何かするたびにif文でその処理が成功したかどうかを
逐一チェックしろと言われているのですね。了解。
624
名前:
デフォルトの名無しさん
:04/08/04 18:17
>>620
いまいち何が言いたいのか分かりませんが、
ライブラリ作成者側はエラーの詳細を伝えるべきではありますが、
内部で使うオブジェクトの詳細を与えるべきだとは思えません。
本来利用者側かでは知る必要がない、
内部で使うローカルオブジェクトの実装の詳細を知る必要が出てくるので。
625
名前:
デフォルトの名無しさん
:04/08/04 18:18
>>624
オブジェクトの詳細じゃなくて、エラーや例外の詳細だと思う。
626
名前:
デフォルトの名無しさん
:04/08/04 18:19
>>622
(゚Д゚)ハァ?
例外クラスは一種類だけではありませんし、
例外クラスの中にも情報を入れる事が出来るのですよ。
627
名前:
デフォルトの名無しさん
:04/08/04 18:21
アンチを相手にするのは時間の無駄だろ。
アホを啓蒙してやりたいって事なら話は別だが。
628
名前:
デフォルトの名無しさん
:04/08/04 18:21
つーかさ、何で話がすり変わってるの?
MFCが吐くCFileのExceptionクラスとやらは詳しい情報吐いてくれないのかも知れないけど、
自分で例外クラス作ればいくらでも詳しい情報書けるぜ。
それなのに自分でクラス書く時に例外吐くなとはどういう事よ?
>>563
出てこいよコラ
629
名前:
デフォルトの名無しさん
:04/08/04 18:23
ぶっちゃけ、このスレには何人いるんだろうか。
630
名前:
デフォルトの名無しさん
:04/08/04 18:23
とりあえず初めの
>>563
はもういない気がする。
己の無知に気づいて。
631
名前:
デフォルトの名無しさん
:04/08/04 18:25
>>623
逐一チェックしろ。
いざ、エラー発生位置などのダンプ情報が欲しくなった時、
手に負えないのが、クラスの例外スロー。
632
名前:
デフォルトの名無しさん
:04/08/04 18:25
そんな事より人に使わせるクラスに
例外仕様も書かない輩が嫌いだ。
633
名前:
デフォルトの名無しさん
:04/08/04 18:26
>>563
は正しいでしょ。
マジで馬鹿だよ、クラスから例外吐くヤシ。
634
名前:
デフォルトの名無しさん
:04/08/04 18:26
>>631
エラー発生位置を例外クラスに詰める事も出来るし、
そもそもデバッガってご存じ?
635
名前:
デフォルトの名無しさん
:04/08/04 18:27
>>632
>>580
636
名前:
デフォルトの名無しさん
:04/08/04 18:27
議論云々の前に例外を知らなすぎる
637
名前:
612
:04/08/04 18:28
>>628
信者の詭弁ですよ。
×自分で例外クラス作ればいくらでも詳しい情報書けるぜ。
○自分で例外クラス作らないと詳しい情報書けないぜ。
638
名前:
デフォルトの名無しさん
:04/08/04 18:29
>>624
こんな例を出すのが適当かどうかわから無いけど例を出す。
ある仕様のXMLファイルのストリームを受け取って、
必要な情報を返すようなライブラリ関数があったとしよう。
(ライブラリの実装としてはそのXML情報をDOMとして取り出して処理しているとする)
DOMツリー構築後、処理途中で与えられたXMLが仕様と合っていない
不備があったとして、どこが不備なのか返すために
Nodeオブジェクトを例外クラスに格納して返したいと思わない?
Nodeオブジェクトがあればどこが仕様に合っていなかったのか
すぐわかると思うけど。
これが無いと、ユーザにXMLのどこが間違っているか示してあげることも
できないんじゃないかな。
639
名前:
デフォルトの名無しさん
:04/08/04 18:30
>>637
そもそもstd::exceptionを直接吐く事の方が少ないと思うのですが、
詭弁ですか?そうですか。
640
名前:
デフォルトの名無しさん
:04/08/04 18:31
>>634
は、クラス使用者に強要される制限が理解できていない。
>>634
は、デバッガが動く環境でしか開発したことがない。
641
名前:
デフォルトの名無しさん
:04/08/04 18:32
>>638
そもそもそのライブラリを使うのに
Nodeオブジェクトの実装を知っている必要がある
(メソッドにNodeを渡したりメソッドからNodeが帰ってきたりする)
のであればそれは構わないのでは無いかと。
642
名前:
デフォルトの名無しさん
:04/08/04 18:32
例外を使う/使わないは純粋に記述量にしか影響しない。
多くの場合、戻り値主義で完璧にやろうとすると複雑さが許容範囲を越える。
643
名前:
デフォルトの名無しさん
:04/08/04 18:33
>>563
が返す例外はいつもint
644
名前:
デフォルトの名無しさん
:04/08/04 18:33
>>618
ファイルのエラーはシーンチェンジと同列ってことですか
645
名前:
デフォルトの名無しさん
:04/08/04 18:34
.NET Framework クラス ライブラリ
FileStream コンストラクタ (String, FileMode, FileAccess)
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemiofilestreamclassctortopic4.asp
例外
例外の種類 条件
ArgumentNullException path が null 参照 (Visual Basic では Nothing) です。
ArgumentException path が空の文字列 ("") か、空白しか含んでいないか、無効な文字を 1 つ以上含んでいます。
FileNotFoundException ファイルが見つかりません。たとえば、 mode が FileMode.Truncate または FileMode.Open の場合に、 path で指定されたファイルが存在しません。これらのモードでは、ファイルが既に存在している必要があります。
IOException FileMode.CreateNew が指定されているのに、 path で指定したファイルが既に存在していることなどが原因で I/O エラーが発生しました。
SecurityException 呼び出し元に、必要なアクセス許可がありません。
DirectoryNotFoundException 割り当てられていないドライブであるなど、指定されたパスが無効です。
UnauthorizedAccessException access が Write または ReadWrite であるのに、ファイルまたはディレクトリが読み取り専用に設定されているなど、指定した path に対する access 要求がオペレーティング システムで許可されません。
PathTooLongException 指定したパス、ファイル名、またはその両方がシステム定義の最大長を超えています。たとえば、Windows ベースのプラットフォームの場合、パスの長さは 248 文字未満、ファイル名の長さは 260 文字未満である必要があります。
ArgumentOutOfRangeException mode に無効な値が含まれています。
646
名前:
デフォルトの名無しさん
:04/08/04 18:35
>>640
>クラス使用者に強要される制限
で、それは何?
647
名前:
デフォルトの名無しさん
:04/08/04 18:35
>>645
そもそも.NETは純粋なC++では動きません。ManagedC++。
648
名前:
デフォルトの名無しさん
:04/08/04 18:36
>>563
は神
649
名前:
デフォルトの名無しさん
:04/08/04 18:37
>>647
無知なお前らにまともなクラスライブラリの仕様を教えてやったんだよ。
650
名前:
デフォルトの名無しさん
:04/08/04 18:38
>>641
ライブラリ使用者側が知っている情報レベルのものなら
例外クラスに入れても良いという考え方だということか。納得できる。
じゃぁ、もしライブラリ使用者側がNodeオブジェクトについて
知らない場合、君ならどうやって例外情報を構築するのか示して欲しい。
俺としてはそれができるならそうしたいのだし。
651
名前:
563
:04/08/04 18:38
やっぱ、夏休みでノンプロが多いな・・・。
一応いっとくけど、漏れは例外処理そのものは肯定する。
特に、エンドPGが
>>551
のサンプルのように自分で自作クラスをスローするのは賛成だ。
糞なのはクラスの例外throw。支持する馬鹿、氏ね、マジで。
652
名前:
デフォルトの名無しさん
:04/08/04 18:38
何かさあ
>>563
の頭の中には何か意見があるんだろうけどさあ、
それを書いてくれないとこっちは分からないんだよね。
漏れは例外は嫌いだしか伝わってこないんだもん。
実生活でも話すの苦手なのかな?
653
名前:
デフォルトの名無しさん
:04/08/04 18:38
>>646
try節を書く必要がある、という制約 (プゲ
654
名前:
デフォルトの名無しさん
:04/08/04 18:39
>>647
例外を適用するコンテキストは言語には依存しないだろう。
655
名前:
デフォルトの名無しさん
:04/08/04 18:40
>>650
そういう場合はassertだろう。
656
名前:
デフォルトの名無しさん
:04/08/04 18:40
563 名前:デフォルトの名無しさん[sage] 投稿日:04/08/04 17:25
例外処理に関して知った風なこと言ってるヤシ、
「自分で作った」例外を投げるクラスぐらいしか使ってないだろ。
完全に自己満足の世界といっていい。
他人に使われることを想定してクラスを作ったら、
クラス内部からスローするような仕様は下の下だということに気付けるはずだ。
563 名前:デフォルトの名無しさん[sage] 投稿日:04/08/04 17:25
例外処理に関して知った風なこと言ってるヤシ、
「自分で作った」例外を投げるクラスぐらいしか使ってないだろ。
完全に自己満足の世界といっていい。
他人に使われることを想定してクラスを作ったら、
クラス内部からスローするような仕様は下の下だということに気付けるはずだ。
563 名前:デフォルトの名無しさん[sage] 投稿日:04/08/04 17:25
例外処理に関して知った風なこと言ってるヤシ、
「自分で作った」例外を投げるクラスぐらいしか使ってないだろ。
完全に自己満足の世界といっていい。
他人に使われることを想定してクラスを作ったら、
クラス内部からスローするような仕様は下の下だということに気付けるはずだ。
657
名前:
デフォルトの名無しさん
:04/08/04 18:41
>>563
>他人に使われることを想定してクラスを作ったら、
>クラス内部からスローするような仕様は下の下だということに気付けるはずだ。
この部分はどう説明なさるのですか?
658
名前:
デフォルトの名無しさん
:04/08/04 18:43
>>651
それで結局どうして糞なんですか?
659
名前:
563
:04/08/04 18:43
>>652
一応PGを飯の種にしてるから、核心の部分はぼかさせてもらう。
例外が嫌いなのは悪い事じゃないと思う。
むしろ、C++の固有機能を必死に使おうとする馬鹿の方が困る。
エレガントに見えて追跡不能である場合が多い。
660
名前:
デフォルトの名無しさん
:04/08/04 18:44
>>659
>他人に使われることを想定してクラスを作ったら、
>クラス内部からスローするような仕様は下の下だということに気付けるはずだ。
どうしてクラス内部からスローするような仕様は下の下なんですか?
あなたの
>>563
の発言からして核心はそこだと思うのですが。
661
名前:
デフォルトの名無しさん
:04/08/04 18:45
核心を伝えよう。
この業界ではプロ==バカ
662
名前:
デフォルトの名無しさん
:04/08/04 18:45
>>651
お前やっぱりアホだろ。
自分で例外を投げても、そのコードを利用するクライアントから見たら、
クラス内で勝手に例外が発生してるんだよ。
現在のスコープより上位に投げないと言うのなら goto で十分だ。
それとも、まさか再利用される可能性の無いアプリケーション固有の
コードでのみ例外をしようして、人が触る可能性のあるコードでは
例外を送出しないとか言うのか?
馬鹿避けと例外安全を勘違いしまくってるだろ。
663
名前:
デフォルトの名無しさん
:04/08/04 18:45
あんまプロ、プロ言わんほうがいいな…
664
名前:
デフォルトの名無しさん
:04/08/04 18:45
>>659
そうだそうだ。563様は偉大なんだ。例外処理についての素晴らしい独自理論をお持ちなんだ。
その理論は門外不出なのに、私たちのためにちょっとだけ教えてくださったんだ。
例外設計を知らないわけじゃないんだぞ。
665
名前:
デフォルトの名無しさん
:04/08/04 18:46
>>661
マ板見ると良く分かるよな
666
名前:
デフォルトの名無しさん
:04/08/04 18:47
>>563
はマ板のあちこちに現れては、
バカな主張を行う人なのでスルーした方が吉です。
特徴
・言葉遣いが汚い。いきなり他人を「お前」よばわりする
・自分の主張を補強する事実は一切ださない
・抽象的な主張の論拠として、さらに抽象的な主張を持ち出す
頭が悪いだけで、悪意はなさそうなんだけど・・・・
667
名前:
デフォルトの名無しさん
:04/08/04 18:47
>>659
技術を共有する気の無い奴は二度と来ないでくれ。
馬鹿対策は実世界で個人的にやってくれ。
668
名前:
デフォルトの名無しさん
:04/08/04 18:48
>>662
>それとも、まさか再利用される可能性の無いアプリケーション固有の
>コードでのみ例外をしようして、人が触る可能性のあるコードでは
>例外を送出しないとか言うのか?
最善だと思うね。一切のオタク色を排除すればそうなる。
669
名前:
デフォルトの名無しさん
:04/08/04 18:48
流れはやいなー
670
名前:
デフォルトの名無しさん
:04/08/04 18:49
煽りがちと気持ち悪いくらい度が過ぎてるので、563の方がまともに見えてきたな
671
名前:
デフォルトの名無しさん
:04/08/04 18:49
盛り上がっているところ恐縮ですが、ifstream が例外を投げないという仕様は皆さんから見て自然なんですか?
672
名前:
デフォルトの名無しさん
:04/08/04 18:49
>>666
よく見てるな・・・
673
名前:
デフォルトの名無しさん
:04/08/04 18:51
C++が廃れた理由が良く分かるよ
674
名前:
デフォルトの名無しさん
:04/08/04 18:51
>>671
例外処理のあるまともな言語は全て投げてる。
675
名前:
デフォルトの名無しさん
:04/08/04 18:51
>>668
他人にも分かる言葉を使って欲しい。
676
名前:
デフォルトの名無しさん
:04/08/04 18:53
これはひどい・・・
677
名前:
デフォルトの名無しさん
:04/08/04 18:53
>>563
はともかくとして、アレコレの API のエラー検出は結局戻り値チェックでやってるので、
API 含有率が高いプログラム書いてるときは例外使いたくなくなることもあるな。
でも「MFC (の CFile) がタコだから例外はダメ」って程度しか論拠を示されないんじゃ、
あまり納得いく論議ではないなぁ・・・MFC みたいにバカが使うライブラリは、例外とか
テンプレートとか使うべきじゃないっていうことなら同意できるけど。
678
名前:
デフォルトの名無しさん
:04/08/04 18:53
666=672
679
名前:
デフォルトの名無しさん
:04/08/04 18:55
STLはバカは使わないのか
680
名前:
デフォルトの名無しさん
:04/08/04 18:55
例外を投げないライブラリに例外を投げるラッパを書くのは手間だけで済むが、例外を投げるライブラリのパフォーマンス上のペナルティは回復しようが無い。
よって例外を投げないほうがまだマシ。
681
名前:
デフォルトの名無しさん
:04/08/04 18:55
>>678
そんな地味な自演を指摘されても(笑
682
名前:
デフォルトの名無しさん
:04/08/04 18:55
>>680
例外は滅多に起きないから例外って言うんですよ。
683
名前:
デフォルトの名無しさん
:04/08/04 18:56
>>680
Cとかアセンブラでも使ったら?
C++が廃れた理由が良く分かるよ。
684
名前:
デフォルトの名無しさん
:04/08/04 18:58
>>680
みたいな事言う香具師に限って線形アルゴリズム乱用したりするんだよね。
685
名前:
デフォルトの名無しさん
:04/08/04 18:58
>>680
>例外を投げるライブラリのパフォーマンス上のペナルティ
それホント?
本当だとしても、例外がパフォーマンスに影響するような設計が悪いんじゃないの?
686
名前:
デフォルトの名無しさん
:04/08/04 18:59
>>680
80,20の法則って知ってる?
687
名前:
デフォルトの名無しさん
:04/08/04 18:59
内心basic_stringの例外クラスout_of_rangeとかウザイと思ってるヤシ、手挙げろ。
素晴しいとか思ってるのはC++ヲタだけじゃねーの?
688
名前:
デフォルトの名無しさん
:04/08/04 19:00
>>682
めったに投げなくても、投げられる可能性があるなら
とりあえず受けておくべきなのが例外ですよ。
で、受けるコードでもペナルティが発生するんです。
689
名前:
デフォルトの名無しさん
:04/08/04 19:00
>>680
は完全に正しい。
C++で最高のパフォーマンスを引き出すコードを記述する場合には。
そして
>>680
は完全に間違い。
C++でパフォーマンスよりも生産性を重視した開発を行う場合には。
C++は特にいろんな前提条件があるんだから断定はできないだろ。
例外がいやならstd使うななってこった。少なくともその自由は与えられているはずだ。
690
名前:
デフォルトの名無しさん
:04/08/04 19:01
>>687
拾わなきゃいいんでない。拾わなきゃどのみち落ちるんだし。
691
名前:
デフォルトの名無しさん
:04/08/04 19:01
>>687
atなんか使わないから、しらん。
692
名前:
デフォルトの名無しさん
:04/08/04 19:02
>>688
それと、戻り値で返されたエラーをifで処理するのと、どっちがパフォーマンスに優れていると思っているのだ?
693
名前:
デフォルトの名無しさん
:04/08/04 19:03
>>692
そりゃifだよ。
694
名前:
デフォルトの名無しさん
:04/08/04 19:03
アメリカのForum回った後に、ここ来るとがっかりするな
695
名前:
563
:04/08/04 19:04
>>689
>例外がいやならstd使うななってこった。少なくともその自由は与えられているはずだ。
その自由さえ制限してしまうのが、クラスの例外スロー。
クラスの例外スローがお前らに何を与えてくれたというのだ?
不便な束縛だけだろう?目を覚ませよ、いい加減。
696
名前:
デフォルトの名無しさん
:04/08/04 19:04
>>695
例外が嫌なら例外吐くクラス使うなよ
697
名前:
デフォルトの名無しさん
:04/08/04 19:04
>>691
今調べたら、append等でもout_of_range投げるんだね。知らなかった。
確かにこれはちょっと余計かな。
698
名前:
デフォルトの名無しさん
:04/08/04 19:05
>>695
>その自由さえ制限してしまうのが、
して無いだろ。std使うなといっている。cstdio使っとけ。
699
名前:
デフォルトの名無しさん
:04/08/04 19:05
>>695
695の言ってる「クラスの例外スロー」の意味がわからないのは私だけ?
700
名前:
デフォルトの名無しさん
:04/08/04 19:06
>>695
はC時代からのプロでもう年だから
どうしてもtry,catch構文が覚えられないだけなんだ。
そっとしておいてやれ。
701
名前:
デフォルトの名無しさん
:04/08/04 19:08
>>699
695 =563語の「クラス」ってのは、たぶんクラスライブラリのことを意味しているんだと思う。
ハードディスクのことを「ハード」っていう人、稀にいるみたいだし。
702
名前:
デフォルトの名無しさん
:04/08/04 19:08
>>563
は過去に例外をcatchし忘れて
クリティカルなアプリが落ちてトラウマになっている。
703
名前:
デフォルトの名無しさん
:04/08/04 19:08
>>690
そりゃそうだけど、落ちるほどのことか?
個人的には、なにもせずに戻してもいいと思うね、この程度なら。
ま、派生クラスでオーバーライドすりゃいいんだけどさ。
704
名前:
デフォルトの名無しさん
:04/08/04 19:10
>>699
コンストラクタが投げる例外のことじゃないかと憶測
705
名前:
デフォルトの名無しさん
:04/08/04 19:10
まあ他人も使うクラスなら「例外吐くなら例外仕様くらい書けよ」というなら
同意だが、「例外吐くなよ」はどうかな。
706
名前:
593
:04/08/04 19:11
>>702
まあな。テスト段階での話だけどな。
苦い目にあったことのない日曜PGには、漏れの堅牢な哲学なぞわからんだろ。
707
名前:
デフォルトの名無しさん
:04/08/04 19:11
>>704
コンストラクタが例外吐かなかったら
構築に失敗した時どうするのだろう…
ああ、またGetLastErrorか(w
708
名前:
デフォルトの名無しさん
:04/08/04 19:12
>>593
具体例を提示できないならいい加減消えな
709
名前:
デフォルトの名無しさん
:04/08/04 19:13
例外の言語仕様は
Java>>>>>>>>>C++
710
名前:
デフォルトの名無しさん
:04/08/04 19:13
>>708
何の具体例?
711
名前:
デフォルトの名無しさん
:04/08/04 19:14
593はtry,catchも忘れるようなアフォ
712
名前:
デフォルトの名無しさん
:04/08/04 19:16
>>706
藻前は
>>593
じゃなくて
>>563
だろ。
自分の番号まで間違えるくらいだから
try,catchも忘れるんだな(w
713
名前:
デフォルトの名無しさん
:04/08/04 19:17
つーか
>>563
が無知なのは分かったから、
いい加減消えてくれないかな。
714
名前:
593=706
:04/08/04 19:17
名前は
>>593
じゃなくて、
>>563
。
>>707
コンストラクタに色んなことをやらすのは、アフォ。
常識っしょ。
715
名前:
デフォルトの名無しさん
:04/08/04 19:18
以上プロ==バカの典型的な例でした。
716
名前:
デフォルトの名無しさん
:04/08/04 19:18
本日のNGワード:593
以上
717
名前:
デフォルトの名無しさん
:04/08/04 19:18
>>707
例外を吐くような処理はコンストラクタじゃなくて初期化用メンバ関数でやれ、とか書いてたのはCマガだっけか(w
718
名前:
デフォルトの名無しさん
:04/08/04 19:20
以下ExceptionalC++さえ呼んでない香具師は
例外に関する発言禁止。
719
名前:
デフォルトの名無しさん
:04/08/04 19:21
んじゃまずお前が呼んできてくれ
720
名前:
563
:04/08/04 19:21
>>712
>try,catchも忘れるんだな(w
漏れがtry,catchを実装しても、投げてくるブツが違ったらどうしようもない。
catch(...)でどうにかなるほど甘くない環境での話だ。
721
名前:
デフォルトの名無しさん
:04/08/04 19:22
>>720
>catch(...)でどうにかなるほど甘くない環境
すでにC++ではありませんね。スレ違いです。
722
名前:
デフォルトの名無しさん
:04/08/04 19:23
>>714
オブジェクトにいちいち初期化完了ステータスとかを持たせるのか?
723
名前:
デフォルトの名無しさん
:04/08/04 19:24
Init呼ばないとオブジェクトが動かないんじゃないの?(w
724
名前:
デフォルトの名無しさん
:04/08/04 19:24
つーか、catch(...)したらどうせ再throwするんだからcatch(...)で済む状況ってあるのか?
725
名前:
デフォルトの名無しさん
:04/08/04 19:25
720は戻り値チェックでも間違った比較をしまくってそうだな。
726
名前:
デフォルトの名無しさん
:04/08/04 19:27
main(){
try {
〜
}
catch(...) {
〜
}
}
回復可能か不能かは別として、とりあえずデバッグ時に
漏れたのキャッチするようにしておけば、キャッチ漏れには
すぐ気づくんじゃないか?
727
名前:
デフォルトの名無しさん
:04/08/04 19:27
catch(const std::exception&)でいいんじゃないの?
例外でintとかstring投げるのは
>>563
くらいだろ(w
728
名前:
デフォルトの名無しさん
:04/08/04 19:27
例外が出来た経緯とか、正しい答えがある風なエラそうなこと言っていた割には
誰一人とて納得させてないんだよな。
729
名前:
デフォルトの名無しさん
:04/08/04 19:29
>>563
に釣られすぎ
730
名前:
デフォルトの名無しさん
:04/08/04 19:29
納得させてないんじゃなくて
頑なに納得しないんだよ。
731
名前:
563
:04/08/04 19:30
>>726
そこからが長かったりする。
進捗報告に1行で記述する項目であっても労力は雲泥の差だ。
732
名前:
デフォルトの名無しさん
:04/08/04 19:33
>>720
それはドキュメントの質が悪いんじゃない?
例えば CFile は CFileException 投げるって書かれてて、それはその通りなんだけど、
CSocketFile のドキュメントには何も書かれてないくせに、
でもコイツは CInvalidArgException 投げる、とか。
733
名前:
デフォルトの名無しさん
:04/08/04 19:33
>>731
>>727
734
名前:
563
:04/08/04 19:33
>>722
つまりステータスを持つなと?
iostream系はアフォと?
>>723
状況によっては正しい。
再利用のない、単純クラスしか使ったことがない
>>723
には理解できんだろうけどな。
735
名前:
デフォルトの名無しさん
:04/08/04 19:36
ここまで頑固だとそのうちクビになりそうだな
736
名前:
デフォルトの名無しさん
:04/08/04 19:37
>>734
初期化ステータスなんか持たせないで、NULLで十分じゃないか。
Initが悪なんて誰も言ってない。お前が常にInitを使うといってるだけだ。
コンストラクタでオブジェクトを構築しないみたいだからな。
737
名前:
563
:04/08/04 19:39
今日はこのスレ、とりわけレベルが低かった。
実用性無視の学者肌の輩が多かったせいか。
無知を相手にしててそこそこ楽しかった、ノシ
738
名前:
デフォルトの名無しさん
:04/08/04 19:39
以上典型的バカでした。
739
名前:
デフォルトの名無しさん
:04/08/04 19:40
170レス位釣れたな。良かったな。
>>563
740
名前:
デフォルトの名無しさん
:04/08/04 19:42
>>736
そこまで具体的な変数管理を想定できるなら、
まずインスタンス利用時にエラーチェックして
クラス外部でスローなりなんなりした方が利用者負担がなくてイイと思う。
なんでわざわざコンストラクタからスローするのかと小一時間(ry
741
名前:
デフォルトの名無しさん
:04/08/04 19:42
だよねぇ。
CFile 使って例外取りこぼして障害発生なんて恥ずかしぃ・・・
そんなの発見するのに
>そこからが長かったりする。
だって。
中国人使ったほうがマシだな。
742
名前:
デフォルトの名無しさん
:04/08/04 19:42
http://diary5.cgiboy.com/2/i_love_u/
この日記って書いてることやばくね?通報されたりしないのかな?
画像とかも無断で使用しすぎだし・・・
743
名前:
デフォルトの名無しさん
:04/08/04 19:44
コンストラクタから例外なげれば
構築済みの(基底クラスやイニシャライザの)デストラクタが全部自動で
走るから楽だよ。
744
名前:
740
:04/08/04 19:47
>>741
誰に対する同意?
自分は例外クラス否定派だけど(w
いい中国人使った事あるの?
基本的にダメダメだと思うが。
745
名前:
デフォルトの名無しさん
:04/08/04 19:50
>>744
同じダメなら人件費安いほうがいいってことだと思う。
でも 563 はダメなりに頑張って最後には動くもの作るんだろうから、
まぁ仕事放り投げちゃう中国人よりは使える場面が多いかもね。
746
名前:
デフォルトの名無しさん
:04/08/04 19:51
>>743
コンストラクタから例外投げなかった場合でも
構築済みのデストラクタが全部自動で走ると思うが・・・。
どういう優位性を主張しているのかわからない。
747
名前:
デフォルトの名無しさん
:04/08/04 19:54
同じことをするんだから
フラグを用意する手間が省けませんか?
deleteもいらないし。
748
名前:
デフォルトの名無しさん
:04/08/04 19:55
中国人に一目置くとは、程度が知れてる(ry
読解力もなさげだし(w、
>>741
。
749
名前:
デフォルトの名無しさん
:04/08/04 19:58
お前ら良く中国人と一緒に仕事なんてできるな。
内心では無茶苦茶憎まれてるよ。
たぶん意図的に致命的なバグ山ほど仕込まれてるよ。
プロジェクトが崩壊する前に早くクビにした方がいい。
750
名前:
デフォルトの名無しさん
:04/08/04 19:58
サッカー見てたらますます怖くなったよ<中国人
■過去ログ置き場に戻る■
1-
前250
次250
最新50
DAT2HTML
0.33f Converted.