■過去ログ置き場に戻る■ 1- 前250 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

C++相談室 part33
251 名前:デフォルトの名無しさん :04/07/30 19:04
>250
無理だっつーの。
そもそもコンパイルも出来ないんだから、素直に書き換えろ。

252 名前:デフォルトの名無しさん :04/07/30 19:06
>250
聞いてる間に書き換えられませんか?

253 名前:デフォルトの名無しさん :04/07/30 19:08
たまたま宣言した変数がバッティングしただけで何でシステム全部書き直す必要が出てくるんだ?

254 名前:デフォルトの名無しさん :04/07/30 19:12
高度にカプセル化してあるので書き換えするとバグが出る可能性が高そうです

255 名前:デフォルトの名無しさん :04/07/30 19:15
いっそのことクラス名からメソッド、メンバ、一時変数全部同じ名前にしたら?

256 名前:デフォルトの名無しさん :04/07/30 19:16
>253
システム全部が同じメソッドに入っている

257 名前:デフォルトの名無しさん :04/07/30 19:35
>>255
そんなことできるんですか!?

258 名前:255 :04/07/30 19:40
可能
ついでにnamespaceも一緒にしとけ

でそれが出来たらなにがしたいんでしょう?

259 名前:デフォルトの名無しさん :04/07/30 19:40
Eclipseのメトリクスプラグインのような、ソースコードの各種複雑度を測るようなツールの
http://eclipsewiki.net/eclipse/index.php?%A5%E1%A5%C8%A5%EA%A5%AF%A5%B9%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3
C++用のって何かありますか(無料のもの)?


260 名前:デフォルトの名無しさん :04/07/30 20:05
「関数の引数の名前」って・・・。とんでもなアホなのか。

261 名前:デフォルトの名無しさん :04/07/30 20:08
C++ようのりファクタリングツール作ったら売れるかな?

262 名前:デフォルトの名無しさん :04/07/30 20:15
>>259
CCCC

263 名前:デフォルトの名無しさん :04/07/30 20:54
>高度にカプセル化してあるので書き換えするとバグが出る可能性が高そうです

あきらかに、いい加減なカプセル化がしてある例だろう。

264 名前:デフォルトの名無しさん :04/07/30 20:56
プログラミングのことで質問があります。

ある関数z=f(x,y)を数値計算し、各(x,y)ごとにzをプロットしたい
のですが、どのようなプログラムを組めばよいでしょうか?

プログラミングで絵を描かせるというよりは、出力されたファイルを
他のソフトで開いてその分布を表示させる、という形にしたいのです。
特に、連続的な(x,y)をどのように離散化させて出力するか
お聞きしたいです。

Excelでも出来るかもしれませんが、どうしてもプログラミングで
行いたいのです。

できれば、C++をもちいておしえていただければ幸いです。

すみませんが、よろしくおねがいします!

265 名前:デフォルトの名無しさん :04/07/30 20:56
無粋な人だ

266 名前:デフォルトの名無しさん :04/07/30 20:59
>264
なにを聞きたいのでせう?
範囲広すぎてたまらん

267 名前:デフォルトの名無しさん :04/07/30 21:21
>>264
#include <iostream>
using namespace std;
typedef double (*Function) (double, double);
const double XMIN (-1); const double XINTERVAL (0.01); const double XMAX (1);
const double YMIN (-1); const double YMAX (1); const double YINTERVAL (0.01);
double func (double x, double y) {return x * x + y * y;}
ostream &output (ostream &p_os, const Function &p_func,
double p_xmin, double p_xinterval, double p_xmax,
double p_ymin, double p_yinterval, double p_ymax) {
for (; p_ymin < p_ymax; p_ymin += p_yinterval)
for (; p_xmin < p_xmax; p_xmin += p_xinterval)
p_os << p_xmin << " " << " " << p_ymin << " " << (*p_func) (p_xmin, p_ymin) << "\n";
return p_os;
}
int main () {
output (cout, &func, XMIN, XINTERVAL, XMAX, YMIN, YINTERVAL, YMAX) << endl;
return 0;
}


268 名前:267 :04/07/30 21:29
267は慌てすぎた.こんな感じでどうでしょう? 大文字のところはすきにして下さい.
#include <iostream>
using namespace std;
typedef double (*Function) (double, double);
const double XMIN (-1); const double XINTERVAL (0.1); const double XMAX (1);
const double YMIN (-1); const double YINTERVAL (0.1); const double YMAX (1);
double FUNC (double x, double y) {return x * x + y * y;}
ostream &output (ostream &p_os, const Function &p_func,
double p_xmin, double p_xinterval, double p_xmax,
double p_ymin, double p_yinterval, double p_ymax)
{
for (double y (p_ymin); y < p_ymax; y += p_yinterval)
for (double x (p_xmin); x < p_xmax; x += p_xinterval)
p_os << x << " " << y << " " << (*p_func) (x, y) << "\n";
return p_os;
}
int main ()
{
output (cout, &FUNC, XMIN, XINTERVAL, XMAX, YMIN, YINTERVAL, YMAX);
return 0;
}


269 名前:デフォルトの名無しさん :04/07/30 21:36
>267さん、

ありがとうございます!
これをもとに取り組んでみたいと思います。
丁寧に書いていただき、また、このようなことに時間をとっていただき、
ありがとうございました!
(23才、OL)

270 名前:デフォルトの名無しさん :04/07/30 21:59
整数値をchar*型に文字列として格納する方法どうしたらいいでしょうか。
123→"123"こんなかんじです。おねがいします。

271 名前:デフォルトの名無しさん :04/07/30 22:04
>>270
sprintf
他には非標準だけどitoaとか

272 名前:デフォルトの名無しさん :04/07/30 22:11
>>270
int i0 (123);
boost::lexical_cast <string> (i0).c_str ();


273 名前:270 :04/07/31 00:00
ありがとうございます。
標準ライブラリのsprintfを使ってみたところコンパイルが通りません。
重ね重ねすみませんがミス指摘お願いします。

#include<stdio.h>

int main(){
int a = 123;
char *str;
sprintf(str,"%d",a);
printf(str);
}

274 名前:デフォルトの名無しさん :04/07/31 00:05
#include <string.h>
あと領域確保してない str にいきなり書き込むな

275 名前:デフォルトの名無しさん :04/07/31 00:13
>>270
残念ながらchar*型に「文字列」は格納できません。

276 名前:デフォルトの名無しさん :04/07/31 00:17
#include<stdio.h>

int main(){
int a = 123;
char *str = "0000000000000000000000000000000000000000";
sprintf(str,"%d",a);
printf(str);
}

にしてみろ。

277 名前:デフォルトの名無しさん :04/07/31 00:22
>273>276
おまえも、おまえもC++禁止。C#でも使っててくれ..

278 名前:デフォルトの名無しさん :04/07/31 00:27
>>277
ここC++スレだろ?


279 名前:デフォルトの名無しさん :04/07/31 00:29
あんなコード核奴は許さん

280 名前:デフォルトの名無しさん :04/07/31 00:38
これでどうや。

#include<stdio.h>

int main (int argc, char * const argv[]) {
int a = 123;
char str;
sprintf(&str, "%d", a);
printf("%s", &str);
return 0;
}


281 名前:デフォルトの名無しさん :04/07/31 00:39
ネタならねたといってくれ...

282 名前:デフォルトの名無しさん :04/07/31 00:50
C++止めろとは言わんが、初心者スレに移動してくれ。

283 名前:デフォルトの名無しさん :04/07/31 08:00
何でポインタ理解出来てないんだよ

284 名前:デフォルトの名無しさん :04/07/31 08:22
× stdio.h
○ cstdio

285 名前:デフォルトの名無しさん :04/07/31 09:49
そこつっこむところちゃう

286 名前:デフォルトの名無しさん :04/07/31 09:53
>>274
sprintfもstdio.hの中にプロトタイプがある。

287 名前:デフォルトの名無しさん :04/07/31 14:01
>>286
そんなのどうでもいい

288 名前:デフォルトの名無しさん :04/07/31 14:09
こう…?やっぱりCは難しい…

#include <iostream>
#include <math.h>

using namespace std;

int main(void)
{
  int i = -123;
  char* str = NULL;
  int l = (int) log(fabs((double) i));

  // - 記号と \0 のため +2
  str = new char[l + 2];

  sprintf(str, "%d", i);

  printf("%s\n", str);

  delete[] str;

  return 0;
}

289 名前:デフォルトの名無しさん :04/07/31 14:12
ここは C++ スレですよ?
ostringstream oss;
oss << a;

290 名前:デフォルトの名無しさん :04/07/31 14:54
どうでもいいけど、ostringstreamって長いよな、名前が。

291 名前:デフォルトの名無しさん :04/07/31 15:06
>>288
math.h→cmath
log→std::log
fabs→std::fabs
それからiostreamをインクルードしてるのになんでsprintf()とかprintf()なの?
インクルードするならcstdioだろが。当分C++スレに来ないでくれないか。
>>290
長けりゃtypedefすればいい。

292 名前:デフォルトの名無しさん :04/07/31 15:21
>>291
fabs→std::abs
の方が良くないか?

あと、言葉遣いは丁寧にな。

293 名前:デフォルトの名無しさん :04/07/31 15:44
関係ないが std::assert() と書いて悩んだことがあるのは、俺だけ?

294 名前:デフォルトの名無しさん :04/07/31 17:58
>>293
俺もある。

295 名前:デフォルトの名無しさん :04/07/31 18:10
assert()って使ったことない

296 名前:デフォルトの名無しさん :04/07/31 18:24
>>295の作ったソフトはバグだらけ

297 名前:デフォルトの名無しさん :04/07/31 18:32
実行時エラーチェックなんてダサすぎ。
全てコンパイルタイムに検出、これがC++。

298 名前:デフォルトの名無しさん :04/07/31 18:37
へー。C++って凄いんだね。これならCppUnitなんていらないね。

299 名前:デフォルトの名無しさん :04/07/31 18:40
質問させてもらいます・・
ゲーム画面に文字を表示したときに文字の背景が白なんですが、
この背景を変える方法はありませんでしょうか

ググってみたりいろいろ調べたんですがまったく見つからず困ってるところです・・


300 名前:デフォルトの名無しさん :04/07/31 18:42
C++にゲーム画面に文字を表示する機能や
背景を変える方法はありません。
コンソールに文字を出力する機能ならありますが。

301 名前:デフォルトの名無しさん :04/07/31 18:57
全部コンパイルタイムなんてムリ

302 名前:デフォルトの名無しさん :04/07/31 19:02
>>299
>ゲーム画面に文字を表示したときに文字の背景が白なんですが・・・

とっても面白そうなゲームですね。なんというゲームですか。
ゲームの名前を教えてください。
それがわからないと、答えられません。

303 名前:299 :04/07/31 19:03
すいません、WIN32APIての使ってウインドウ作ってまして、
sprintf関数とTextOut関数で表示させてるんですが

こういうのになるとスレ違いなんでしょうか?

304 名前:デフォルトの名無しさん :04/07/31 19:07
Win32API質問箱 Build21
http://pc5.2ch.net/test/read.cgi/tech/1090422324/

305 名前:299 :04/07/31 19:10
>>304
ど、どうも・・失礼しました(´・ω・`)

306 名前:デフォルトの名無しさん :04/07/31 19:39
メンバ関数をqsortの第四引数に渡したい場合どうしたら良いのでしょうか?

307 名前:デフォルトの名無しさん :04/07/31 19:55
MURI

308 名前:デフォルトの名無しさん :04/07/31 20:01
緩衝コードを書く

309 名前:306 :04/07/31 20:07
緩衝コードとは何でしょう?
例えばこんなのですが?

class C;
static C* g_ptr = NULL;
class C
{
public:
    void f(){}
    C(){ g_ptr = this; }
};

void
f()
{
    return g_ptr->f();
}

でもグローバル変数使うのが嫌でつ

310 名前:デフォルトの名無しさん :04/07/31 20:14
std::sort は使えんのか?

311 名前:デフォルトの名無しさん :04/07/31 20:29
メンバ関数ポインタは関数ポインタよりでかいからqsortに渡すのはムリだな

312 名前:デフォルトの名無しさん :04/07/31 20:39
>>311
ハァ?

313 名前:デフォルトの名無しさん :04/07/31 20:52
>>312
何がハァ?なの?

314 名前:デフォルトの名無しさん :04/07/31 20:57
>>309
一口にメンバ関数といっても
比較対象を lhs と rhs としたときに
lhs.compare(rhs) と someobj.compare(lhs, rhs) のどっちの形だ?
前者の場合であれば、compare(lhs, rhs) の形の非メンバ関数でラップしてやるだけ。
後者の場合、静的オブジェクト使いたくないのなら std::sort 使った方がいいだろう。


315 名前:デフォルトの名無しさん :04/08/01 00:16
ポインタに大小なんてあるんか?

316 名前:デフォルトの名無しさん :04/08/01 00:19
64bitOSならポインタは8バイトだろ。
32bitOSならポインタは4バイトだ。

317 名前:デフォルトの名無しさん :04/08/01 00:23
>>312
リップマンの本にだって書いてあるぞ
それ以前に実験くらいしてるのかよ

318 名前:デフォルトの名無しさん :04/08/01 00:27
アフォはこれでも読んどけ
http://66.102.7.104/search?q=cache:MEEg_aU1vNEJ:www1.kcn.ne.jp/~robe/cpphtml/html03/cpp03058.html+%E3%83%A1%E3%83%B3%E3%83%90%E9%96%A2%E6%95%B0%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF+%E3%82%B5%E3%82%A4%E3%82%BA&hl=ja&lr=lang_ja&inlang=ja

319 名前:デフォルトの名無しさん :04/08/01 00:31
>>316
おまいの言ってることは残念ながら滅茶苦茶だが、それはおいといて、
315のような質問に、そういったニュアンスの答えをしたくなるわな。
(316の言ってることは正しくないが、316がどういうことを言いたかったかはわかるということ)

さて、それをふまえると>>311に対しては、やはり ハァ? というリアクションしかでねぇだろう?

320 名前:デフォルトの名無しさん :04/08/01 00:34
>>311
> メンバ関数ポインタは関数ポインタよりでかいから
単純に型が違って変換できないだけなのに、
実装依存の理由を持ち出すのは感心できない。

321 名前:デフォルトの名無しさん :04/08/01 00:34
>>319
話がピーマンw

322 名前:デフォルトの名無しさん :04/08/01 03:57
どなたか教えてください。
3次元配列を確保する関数を作ったのですが、これで合ってるでしょうか・・?

// 確保する
template <class X>
X*** new3D(X type, int x1, int x2, int x3){
X*** p = new X**[x1];
for(int i=0; i<x1; i++){
p[i] = new X*[x2];
for(int j=0; j<x2; j++)
p[i][j] = new X[x3];
}
return p;
}

// 解放する
template <class X>
void delete3D(X& p, int x1, int x2){
for(int i=0; i<x1; i++){
for(int j=0; j<x2; j++)
delete [] p[i][j];
delete [] p[i];
}
delete [] p;
}

// 使うとき
BYTE ***p = new3D((BYTE)0, HEIGHT, WIDTH, DEPTH);
delete3D(p, HEIGHT, WIDTH);

一応動くのですが、なにか勘違いをしてないか不安です。
コンパイラはVC++の.NETを使ってます。

323 名前:デフォルトの名無しさん :04/08/01 04:06
見づらくてすいません・・・タブは消えてしまうみたいですね。

// 確保する
template <class X>
X*** new3D(X type, int x1, int x2, int x3){
  X*** p = new X**[x1];
  for(int i=0; i<x1; i++){
  p[i] = new X*[x2];
  for(int j=0; j<x2; j++)
    p[i][j] = new X[x3];
  }
  return p;
}

// 解放する
template <class X>
void delete3D(X& p, int x1, int x2){
  for(int i=0; i<x1; i++){
    for(int j=0; j<x2; j++)
      delete [] p[i][j];
    delete [] p[i];
  }
  delete [] p;
}

長文ですいません。

324 名前:デフォルトの名無しさん :04/08/01 04:37
>>321-322
・std::vector 使ったほうがよくない?
・new3Dの第1引数は何?
・delete3Dの第1引数が参照になってるのは何故?

325 名前:デフォルトの名無しさん :04/08/01 05:25
>>324
>delete3Dの第1引数が参照
これはたぶんdelete3D内でp = 0; なんてやるつもりなんだろうけど。

326 名前:デフォルトの名無しさん :04/08/01 05:40
>>321
new3D内のoperator new[]やXのデフォルトコンストラクタが例外を投げると、
それまでにoperator new[]によって確保成功したメモリがリークします。

あと、new3Dとdelete3Dとで、同じテンプレート仮引数名に対する型が違うのは良くないので、
template <class X> void delete3D(X*** p, int x1, int x2); としたほうがいいでしょう。

327 名前:326 :04/08/01 05:51
324につられてレス番まちがえた。正しくは>>322宛て。

328 名前:デフォルトの名無しさん :04/08/01 06:28
レスありがとうございます。

>>324
まだC++始めたばかりで、STLは使ったことがないのですが、 
ttp://sapporo.cool.ne.jp/tanomi/qanda/a049.html ←このページのようなやり方で3次元にするということでしょうか?
確かにこっちの方が便利そうですね。
new3Dの第1引数はただ型名を教えるためだけのものなんですが・・・よく考えるといらなかったですね;

>>325
特に深く考えないで参照にしたのですが、ポインタの方がいいみたいですね。

>>326
例外処理をした方がいいということですよね?
これで合ってるでしょうか・・・。


329 名前:デフォルトの名無しさん :04/08/01 06:31
template <class X>
X*** new3D(int x1, int x2, int x3){
    int i,j,k;
    try{
        X*** p = new X**[x1];
        for(i=0; i<x1; i++){
            p[i] = new X*[x2];
            for(j=0; j<x2; j++)
                p[i][j] = new X[x3];
            }
    }catch (bad_alloc){
        int ii=i, jj=j;
        while(--jj>0) delete [] p[ii][jj];
        delete [] p[ii];

        for(; ii>=0; ii--){
            for(jj=0; jj<x2; jj++)
                delete [] p[ii][jj];
            delete [] p[ii];
        }
        delete [] p;
    }

    return p;
}

330 名前:デフォルトの名無しさん :04/08/01 06:46
>>329
コンパイル通らないソース貼ってどうするよ。
それ以外にも、基本的にダメ。
すべての new で例外が発生することを考慮しないといけない。もう少しシミュレーションを密にせよ。
Xのデフォルトコンストラクタでの例外を考慮すると、catch(...)が必要。
あと、巻き戻し処理が終わったら throw; で受け取った例外を外にそのまま伝えるべし。

・・・と、まぁ真面目に例外処理を行うためには必要な知識も多く、コーディングも面倒だから、
おとなしく std::vector 使っとけってこった。

331 名前:デフォルトの名無しさん :04/08/01 06:54
>>330
あれ?僕のだとコンパイル通るのですが・・・
とりあえず、力不足でした・・・。
やっぱりvectorで作ってみることにしますね。
アドバイスありがとうございました。

332 名前:デフォルトの名無しさん :04/08/01 07:10
>>331
ほんとうに通ったのか?
少なくとも、pのスコープがtryの中なので、catchの中とreturnの時点では使えないはず。

333 名前:デフォルトの名無しさん :04/08/02 00:16
>Xのデフォルトコンストラクタでの例外を考慮すると、catch(...)が必要。
例外指定による

>あと、巻き戻し処理が終わったら throw; で受け取った例外を外にそのまま伝えるべし。
ミッションによる

>必要な知識も多く、
こんな程度で多いと言う人の基準が謎(精一杯の好意的表現)

>コーディングも面倒だから、
だったら std::vector なんか使うより C++ から撤退すべき

んで、
>基本的にダメ
プ

334 名前:デフォルトの名無しさん :04/08/02 00:20
>>332
pというグローバル変数があるのでしょう。

335 名前:デフォルトの名無しさん :04/08/02 00:21
何一つ論破出来てないんですが

336 名前:デフォルトの名無しさん :04/08/02 00:21
釣りは放置しろ

337 名前:デフォルトの名無しさん :04/08/02 08:21
absやfabsfを使い分けるのが面倒なのですが
勝手にうまくやってくれる関数はありませんか?

338 名前:デフォルトの名無しさん :04/08/02 08:41
>>337
その程度ならテンプレで自作

339 名前:デフォルトの名無しさん :04/08/02 10:22
>>337
VC++ならabsはオーバーロードされている。

340 名前:デフォルトの名無しさん :04/08/02 11:31
C++ のファイル入出力やロケールは、かなり奥が深いのに、
Web上にドキュメントがほとんどない。

日本語で書かれたオススメの本または、web サイトがあれば教えてください。
ちなみに今知りたいのは、basic_filebuf のカスタマイズについてです。

341 名前:デフォルトの名無しさん :04/08/02 17:25
テキストファイルの中に指定の文字があったらtrueを返す関数として
次のように書いたら、鼻で笑われてしまいました_| ̄|○
どの辺が駄目なのか指摘してもらえないでしょうか

bool hoge( const char* file_name, const char* sz_target ){
using namespace std;
ifstream ifstrm( file_name );
if( ifstrm.fail() ) return false;

string str;
while( ! ifstrm.eof() ){
. getline( ifstrm, str );
. if( str.find( sz_target ) != -1 ) return true;
}
return false;
}

342 名前:デフォルトの名無しさん :04/08/02 17:26
>>341
-1のあたり。
つーか質問する前にちゃんと動くか位試せよ。

343 名前:デフォルトの名無しさん :04/08/02 17:31
>>342
いえもちろん動かした上です
環境はVC6です

そこ以外は問題ないのでしょうか

344 名前:デフォルトの名無しさん :04/08/02 17:32
-1でちゃんと動くの?

345 名前:デフォルトの名無しさん :04/08/02 17:33
ちゃんと動くね。
わざわざstringを使う必要ない気がするが。

346 名前:デフォルトの名無しさん :04/08/02 17:35
普通はstring::nposと書く。

347 名前:デフォルトの名無しさん :04/08/02 17:36
てぬいて書く分にはいいんでないの?
その分他の仕事したほうがいい!

348 名前:デフォルトの名無しさん :04/08/02 17:42
>>344 >>346-347
初めて見た例が-1だったため、ずっとこれでやってました_| ̄|○

>>345
やっぱり普通に>>で文字列取って、strcmpとかの方が良いのでしょうか?
早速、書き直します

皆さんレスありがとうございました

349 名前:デフォルトの名無しさん :04/08/02 17:47
いや自分で比較ルーチン作るかでなければ今のでいいんじゃない?
−1でいいのかは知らん.

350 名前:デフォルトの名無しさん :04/08/02 18:12
関係ないが、昔の記事だけどこれを思い出した
ttp://pc.2ch.net/tech/kako/996/996640937.html
の900

これがクソコードらしいな
何故なのか未だに分からないが

351 名前:デフォルトの名無しさん :04/08/02 18:25
magicnumberの使用

352 名前:デフォルトの名無しさん :04/08/02 18:59
>>350
かなりの古参でつね。

353 名前:デフォルトの名無しさん :04/08/02 19:42
>>350
コードの断片だけで、クソかどうか言われてもね。
ちなみに、私なら、1行ずつ処理するよりも、
ファイル内容を全部ベクタに詰め込んでから処理したいから、
以下のように書く。

ifstream file("test.txt", ios::in | ios::binary );
istreambuf_iterator< char > file_begin( file ), file_end;
vector< char > buff;
buff.insert( buff.end(), file_begin, file_end );

よく見るコードだから、取り立てて言うまでもないけどさ…

354 名前:デフォルトの名無しさん :04/08/02 20:12
>>353
クソコードだな

355 名前:デフォルトの名無しさん :04/08/02 20:13
ほんとだな。ファイルでかかったらメモリ食い尽くすし。

356 名前:デフォルトの名無しさん :04/08/02 20:26
どこでこんなのをよく見るんだ・・・

357 名前:デフォルトの名無しさん :04/08/02 21:26
perlとかならよく見る。

358 名前:デフォルトの名無しさん :04/08/02 22:29
ifstreamで全て読み込み終わってEOFとなるとseekgによって
ファイルポインタを動かすことができなくなるという仕様らしいのですが
再び先頭から読み込みたい場合はもう一度、ファイルを閉じて開いて
というようなことをするしかないのでしょうか

もっと上手い方法をご存知の方がいらっしゃいましたらよろしくお願い致します

359 名前:デフォルトの名無しさん :04/08/02 22:36
clearすればええやん。

360 名前:デフォルトの名無しさん :04/08/02 22:48
>358
そこらへんのapiの動作に依存するのやで全部かいてますが
自分でバッファも確保しうまくやる

361 名前:デフォルトの名無しさん :04/08/02 23:23
>>341
禁則やWordWrapの問題があるんでない?
2行以上にまたがった比較もしないといけないケースはないの?


362 名前:デフォルトの名無しさん :04/08/03 00:03
http://pc.2ch.net/tech/kako/996/996640937.html

363 名前:353 :04/08/03 01:03
>>355
最近のOSならば、vector::reserve で 20MB くらいの確保なら余裕だし。
それに、std::distance でサイズ調べて、あまりに大きかったら分割すればOKっしょ。

364 名前:デフォルトの名無しさん :04/08/03 01:08
いや明らかに糞だよ?

365 名前:デフォルトの名無しさん :04/08/03 01:10
プゲラ

366 名前:デフォルトの名無しさん :04/08/03 02:52
std::listってどんなときに使うの?
std::dequeでよくね?
つーか、ぶっちゃけいらないんだけど・・・

367 名前:デフォルトの名無しさん :04/08/03 03:07
初心者には必要ないよ

368 名前:デフォルトの名無しさん :04/08/03 05:07
vectorやlistってハンガリー記法だとどんな接頭語になるの?

369 名前:デフォルトの名無しさん :04/08/03 05:24
クラスに接頭語はつけないだろ
アルファベットが足りなくなる

370 名前:デフォルトの名無しさん :04/08/03 08:30
>std::distance でサイズ調べて

オイオイ、めちゃくちゃ時間かかるぞ

371 名前:デフォルトの名無しさん :04/08/03 08:48
>>368
俺はvectorとstringは例外的にvc, strを付けているけどそれ以外のクラスに接頭語は付けていない。
つかハンガリアンスレ行け。

372 名前:デフォルトの名無しさん :04/08/03 09:41
>368
うちの会社で駆逐したハンガリアン派がまだいたか

373 名前:デフォルトの名無しさん :04/08/03 10:51
>>371
ダサッ

374 名前:デフォルトの名無しさん :04/08/03 10:55
ダサイかダサくないかの問題ではない

375 名前:デフォルトの名無しさん :04/08/03 10:56
>>373にとってはそれが全て

376 名前:デフォルトの名無しさん :04/08/03 11:38
ハンガリアン使わなくなったけど、いまだにポインタにはpを付ける。

377 名前:デフォルトの名無しさん :04/08/03 11:44
>>364
詳しく


378 名前:デフォルトの名無しさん :04/08/03 12:03
>>376
ナカーマ

379 名前:デフォルトの名無しさん :04/08/03 12:06
変数名が短い時代は終わった。ポインタは接尾辞にPtrだろう。

380 名前:デフォルトの名無しさん :04/08/03 12:08
>>379
>変数名が短い時代は終わった。
だったら接尾辞にPointerじゃないの?

ただのなんかのカウンタのローカルポインタなら
localTemporaryCountPointer

381 名前:デフォルトの名無しさん :04/08/03 12:10
>>376
スマートポインタにも付けるの?

382 名前:デフォルトの名無しさん :04/08/03 12:10
>>380
コード補完が無い環境とか1行に表示できる文字数が少ない環境にとっては嫌がらせに近いな。

383 名前:デフォルトの名無しさん :04/08/03 12:11
localTemporaryCounterInHogehogePointerToSignedInt32bits

384 名前:デフォルトの名無しさん :04/08/03 12:17
localTemporaryCounterInHogehogePointerToSignedInt32bitsButShouldBeScoped_ptrAtBoostLibrary

385 名前:デフォルトの名無しさん :04/08/03 12:19
変数名を考えるだけで一日が終わりそうだ

386 名前:376 :04/08/03 12:22
>>381
最初spとか付けようと思ったけど
そんなことやってるとハンガリアンに戻りそうだったので
何も付けないことにしてる。

387 名前:デフォルトの名無しさん :04/08/03 13:30
pとか言ってる時点でハンガリアンケテーイ

388 名前:デフォルトの名無しさん :04/08/03 13:31
>>382
それが狙いなんだよ。
糞エディタ捨ててIDEを使えと教育してやってるの。

389 名前:デフォルトの名無しさん :04/08/03 14:08
ポインタにp付けるのは,C++以前,K&Rの頃からあると思うが…
ハンガリアンだと,lpとかじゃないの?

390 名前:デフォルトの名無しさん :04/08/03 14:18
>>389
lpはポインタにfar/nearの区別があった頃の名残で、比較的新しいAPIはpに変わってきている。

391 名前:デフォルトの名無しさん :04/08/03 14:40
ハンガリアンマンセーな奴とアンチってどこにでも見かけるんだけど、実際プロの現場ではどうなのよ?

392 名前:デフォルトの名無しさん :04/08/03 14:42
もちろん両方いるよ。
ただハンガリアン使わないほうが賃金が高いという傾向にあるという統計データが出てるよ。
もちろん表記を使うかどうかで差が出るわけではなく
賃金の低いC/C++のロートルプログラマが好んで使うというカラクリ。

393 名前:デフォルトの名無しさん :04/08/03 14:59
あやしいー

394 名前:デフォルトの名無しさん :04/08/03 15:10
C++限定だけど、
非ハンガリアンはハンガリアンのことをアホだと思っているけど、
ハンガリアンは非ハンガリアンのことを「なんでこんな便利なのに使わないんだろう」程度に思っている。

私は非ハンガリアン。
Cでハンガリアンなのは構わないけどね。

395 名前:デフォルトの名無しさん :04/08/03 16:04
なんで C++ 限定なの?

396 名前:デフォルトの名無しさん :04/08/03 16:06
OOP だろ

397 名前:デフォルトの名無しさん :04/08/03 16:10
C++使ってると、ポインタ/スマートポインタにpは付けるな。
アンチハンガリアンが過ぎるあまり、型情報を含んだ接頭語自体を
必要以上に毛嫌いしすぎてる気がする。

gotoみたいに、分からなくてもとりあえず排除しとけばいいってモンでもないのに。

398 名前:デフォルトの名無しさん :04/08/03 16:25
C++だと継承とか多態性とか。
抽象クラスの変数に実装クラスのインスタンスを割り当てる時とか。
ハンガリアンじゃ困らないか?

intとかのプリミティブな型はどっちでもいい。
変数へのアクセスって自クラスからか、ローカルか、friend関数・クラスからしかありえないと
思うんで(グローバル使ってるのは論外)。
そんなものは、どう付けようと宣言がすぐそばにあるはず。
IDE使わなくても何型かすぐわかるだろ?
ただ、名称は意味のあるものにしてほしいけど。

399 名前:デフォルトの名無しさん :04/08/03 16:40
メンバ変数を区別するかどうか
これが悩む

400 名前:デフォルトの名無しさん :04/08/03 16:58
ハンガリアンてなに?

401 名前:デフォルトの名無しさん :04/08/03 17:04
オレ、goto使ってるけどな。

402 名前:デフォルトの名無しさん :04/08/03 17:06
多重ループ抜ける goto とか上から下のみの goto な許せる

403 名前:デフォルトの名無しさん :04/08/03 17:09
>>399
どちらでもいいと思う。
ローカル変数とメンバ変数の区別だけなら
メンバ変数の前にthis->をつける
メンバ変数の最後にアンダーバーや最初にm_
など。

>>400
M$の一プログラマが決めた変数の命名規約。ハンガリー出身だったからハンガリアン規約と呼ばれる。
当初M$は推奨していたが、今は非推奨。

>>401
C言語でエラー処理を一カ所にまとめて記述するのに用いるのはそう悪いことではないという人もいる。
C++だと悪。
というか、ネタ?
マジレスごめん。

404 名前:デフォルトの名無しさん :04/08/03 17:11
>>399
ローカルじゃないのは、ほぼ間違いなくメンバだろうし
ローカルとメンバの区別さえできれば良い気がするんだけどなぁ。
でも世のサンプルはm_とかついてるの多いよね。

おいらローカル変数は小文字のみでnum_applesみたいに
メンバ変数はnumApplesって感じにしてるけど、良いのやら悪いのやら

405 名前:デフォルトの名無しさん :04/08/03 17:13
403さんとかぶった

DirectXのMSによるサンプルは、
C++だけどエラー処理にgoto使いまくってるねぇ

406 名前:デフォルトの名無しさん :04/08/03 17:20
エラー処理といっても、そのエラーが頻繁に起こりうる場合は
例外は使いづらい。

407 名前:デフォルトの名無しさん :04/08/03 17:24
エラーってどうしておこるの?

408 名前:デフォルトの名無しさん :04/08/03 17:25
仮引数やローカル変数とメンバの区別はthis->でいいけど
コンストラクタと初期化リストの場合は区別できないから悩む。
メンバにm_とかケツアンダースコアとかつけたくないけど、
仮引数の名前にそれをつけるのも気が引けるしな。

409 名前:デフォルトの名無しさん :04/08/03 17:25
人間が無能だからさ

410 名前:デフォルトの名無しさん :04/08/03 17:28
だからといってgoto文を使っていい理由にはならない。
if else で何とかするか、設計を見直してみる。

以前みた一番酷いgotoは、forの2重ループの中のif文の中に飛び込むやつ。
外部からきた完成品なもんで修正することもできず、そのまま利用。Cだったけどね。


411 名前:デフォルトの名無しさん :04/08/03 17:30
>>408
じゃあ>>404さんみたいに小文字と大文字でとかどうだろ。
むずかしいね、そこんところは。


412 名前:デフォルトの名無しさん :04/08/03 17:31
自分ひとりでやるのならa b c d e f g h i j k l m で十分と思う

413 名前:デフォルトの名無しさん :04/08/03 17:33
if else で何とかして見難くなるくらいだったら、
オレは喜んでgoto使うな。っていうか使ってる。
関数の最下行のreturn(...);に飛ばすときだけだけど。

414 名前:デフォルトの名無しさん :04/08/03 17:35
>>413
途中でreturnするのはだめなの?

415 名前:デフォルトの名無しさん :04/08/03 17:35
素直にメンバ変数にm_付けてて何の不自由も感じないよ。

416 名前:デフォルトの名無しさん :04/08/03 17:36
>>410
うへぇ〜。。。。。

CPU時間が厳しい場所で例外も関数呼び出しもイヤな状況下でgoto使うのはそれほどイヤじゃないけど。
ループの中に入るなんて。。。。

417 名前:デフォルトの名無しさん :04/08/03 17:36
>>414
戻値のチェックをするときは一箇所にまとめたほうが楽だからね。


418 名前:デフォルトの名無しさん :04/08/03 17:38
いろんなところで return があると見にくい

419 名前:デフォルトの名無しさん :04/08/03 17:39
tryのthrowでchatchしてリターンさせれば?

420 名前:デフォルトの名無しさん :04/08/03 17:39
>>410
> forの2重ループの中のif文の中に飛び込むやつ

それは論外ですね。掟破りでしょう。
それ作った香具師は逝って吉ですw

421 名前:デフォルトの名無しさん :04/08/03 17:41
>>417
戻り値のチェックは普通、外側でやるもんじゃないの?

422 名前:デフォルトの名無しさん :04/08/03 17:42
ハンガリアン、gotoスレ逝け。
この低賃金どもが。

423 名前:デフォルトの名無しさん :04/08/03 17:44
>>421
そうとは限らないす。
戻値によってreturnする前の内部あと処理を分けたいときなど。

424 名前:デフォルトの名無しさん :04/08/03 17:46
とにかく、処理の流れの中で、必ずここを通るってのがあると、
デバッグとかしやすいかな。

425 名前:デフォルトの名無しさん :04/08/03 17:47
>>422
もしかして、forループ内にgotoで飛び込んじゃう人でしょ。
恥ずかしいからって切れなさんな。


426 名前:デフォルトの名無しさん :04/08/03 17:49
>>422
低賃金どころか無収入ですが何か?

427 名前:デフォルトの名無しさん :04/08/03 17:55
>>426
ステキ!!

428 名前:デフォルトの名無しさん :04/08/03 18:18
標準C/C++ ライブラリで、ファイルサイズを求める関数・メソッドはありますか?



429 名前:428 :04/08/03 18:19
あと、ついでに、ファイルのコピーと、ファイルの削除を行う関数もありましたら教えてください。


430 名前:デフォルトの名無しさん :04/08/03 18:20
ない

431 名前:デフォルトの名無しさん :04/08/03 18:24
remvoveってあったような。

432 名前:431 :04/08/03 18:24
removeね

433 名前:デフォルトの名無しさん :04/08/03 19:32
>>429
ファイルコピーをする関数は標準ライブラリ関数だけで当然作れる。

434 名前:デフォルトの名無しさん :04/08/03 19:34
ファイルの内容だけならな

435 名前:デフォルトの名無しさん :04/08/03 19:35
>>433
それ言っちゃファイルサイズも……。

436 名前:デフォルトの名無しさん :04/08/03 19:37
俺たちは、ファイルのコピーすら、OS の力を借りないと出来ないのか…!

437 名前:デフォルトの名無しさん :04/08/03 19:40
ハードディスク会社が独自のAPIを開発してくれればいいんだよ

438 名前:デフォルトの名無しさん :04/08/03 19:43
よー考えたら全部仮想化の賜だな


439 名前:デフォルトの名無しさん :04/08/03 19:50
C++.NETなら標準でできるよ

440 名前:デフォルトの名無しさん :04/08/03 20:06
C++って非力だな。
N88BASIC以下じゃん。

441 名前:デフォルトの名無しさん :04/08/03 20:20
そりゃそうさ、いちいちコンパイルしなきゃな上
GOTO使えば怒られる始末だからな

442 名前:デフォルトの名無しさん :04/08/03 20:41
BASIC の単細胞ぶりが羨ましいぜ

443 名前:デフォルトの名無しさん :04/08/03 20:49
AUTO 10

444 名前:デフォルトの名無しさん :04/08/03 21:28
初歩的な質問で申し訳ありませんが,
クラス内にprivateで配列を宣言したとき,
その配列の値をもらうためにはクラスに十分な大きさの
ポインタなどを渡して,クラス内の関数でポインタに値をコピーするしか方法は
無いのでしょうか?
それともprivateで宣言した配列のポインタを取得してクラス外で操作しても
問題無いのでしょうか?
前者だと,配列の大きさによっては処理に時間がかかってしまいます.
後者だとprivateで宣言した意味が無いような気がします.



445 名前:デフォルトの名無しさん :04/08/03 21:31
>それともprivateで宣言した配列のポインタを取得してクラス外で操作しても
>問題無いのでしょうか?

問 題 な い わ け な い だ ろ ! !

446 名前:デフォルトの名無しさん :04/08/03 21:34
>>444
後者。こんなこともやれる。
class Hoge {
 char Buf[255];
public:
 char *GetBuf() {return Buf;}
};
std::stringのc_strなんかのようにconstポインタを返すこともある。

447 名前:デフォルトの名無しさん :04/08/03 21:35
>>444
constなポインタなりイテレータを返せばいいやん。

448 名前:デフォルトの名無しさん :04/08/03 21:35
>>444
後者。

449 名前:デフォルトの名無しさん :04/08/03 21:37
「その配列の値をもらう」って、「クラスの中から外へ」と「クラスの外から中へ」とで曖昧じゃないか?
答えてる人たちはどっちだと思って話してるの?

450 名前:デフォルトの名無しさん :04/08/03 21:45
>>446
Bufがprivateである意味は?

451 名前:デフォルトの名無しさん :04/08/03 21:47
>>449
同じことだろ。

publicなポインタ取得メソッドを用意して万人にさらけだすのは問題だが
自メソッド内で他クラスにポインタ渡して操作してもらう分には無問題(であることもある)

452 名前:デフォルトの名無しさん :04/08/03 21:49
class Unko{
char buf[100];
public:
char getAt(int i) const{ return buf[i]; }
void setAt(int i,char ch){ buf[i]=ch; }
};

453 名前:デフォルトの名無しさん :04/08/03 21:50
private メンバのハンドルを const もつけずに返そうとしてるんだったら、今後の身の振り方を考えた方がよい

454 名前:デフォルトの名無しさん :04/08/03 21:52
>>450
>Bufがprivateである意味は?

あとで
class Hoge {
 char* Buf;
public:
 Hoge() { Buf = new char[max_buffer_size] };
 char *GetBuf() {return Buf;}
};
とか変更しやすいようにじゃない? sizeof とかされたくないジャン。

455 名前:デフォルトの名無しさん :04/08/03 21:53
>>453
例えば 2次元の画像データのバッファを抽象化した Bitmap クラスなんかでは、
const じゃないポインタを返すのも十分ありだと思うけど。

456 名前:デフォルトの名無しさん :04/08/03 21:55
しかしレベル低いな

457 名前:デフォルトの名無しさん :04/08/03 21:58
クラス外で作った配列をクラス内の配列に一気に持って来たいならコピーするべきだし、
それがメモリ容量、スループット上問題になるなら >>452 みたいにちまちまクラス内部
の配列に直接書くなり、もっと効率のよい関数を作るなりするべき。
さらに、それらが現実にそぐわないなら・・・・

458 名前:デフォルトの名無しさん :04/08/03 22:09
>>445はアフォということで

459 名前:デフォルトの名無しさん :04/08/03 22:12
classで宣言するからよくない。structで宣言してこれはちょっと便利な
関数つきの構造体ですよと言い張る。

460 名前:デフォルトの名無しさん :04/08/03 22:15
privateなのにメンバ関数もなしにいつの間にか値が変わってる…
そんなことなら最初からpublicにしてくれyo!

461 名前:444 :04/08/03 22:17
>>444です.

レスありがとうございます,とりあえず後者でも問題無いと言うことでよいのでしょうか?
(少し理解しきれてない模様です...)

あと,ちょっと疑問に思ったのですが,
>>451
>publicなポインタ取得メソッドを用意して万人にさらけだすのは問題だが
つまり
class Hoge {
 char Buf[255];
public:
 void *GetBuf(char *buf) { buf = Buf;}
};
このようなのはダメってことで良いのでしょうか?




462 名前:461 :04/08/03 22:19
微妙に間違えてました.
public:
 void GetBuf(char *buf) { buf = Buf;}
です.


463 名前:デフォルトの名無しさん :04/08/03 22:23
>>462
strcpy( buf, Buf );
じゃダメなのか?

464 名前:デフォルトの名無しさん :04/08/03 22:28
>>461-462
その処理、何か意味があるの?

465 名前:デフォルトの名無しさん :04/08/03 22:30
>>461 462
っていうか、コンパイル通る?

466 名前:デフォルトの名無しさん :04/08/03 22:32
>>462は引数の値を変えただけ。
外部には何の影響も与えないけど。

467 名前:461 :04/08/03 22:44
あああ,何か基本的なことを間違えていたようです.
それで,話を勝手にふくらませてprivateがうんぬんとか考えていたようです.
>>461みたいなことをやっていました,orz
とりあえずプログラムは動きましたが,
頭は夏休みらしいので逝ってきます...




468 名前:デフォルトの名無しさん :04/08/04 00:55
for (int counter=0; counter<count_end; counter++) {
 try {
  func_throws_exceptions();
 } catch (std::exception&) {
  operations(counter);
 }
}

try {} catch() {} のオーバーヘッドの所為で上が非常に重いので、

int counter=0;
try {
loop_top:
 for (; counter<count_end; counter++) {
  func_throws_exceptions();
 }
} catch (std::exception&) {
 operations(counter);
 if (++counter != count_end) {
  goto loop_top;
 }
}

こうしたのですが、もっとスマートな書き方ないでしょうか?

469 名前:デフォルトの名無しさん :04/08/04 01:08
gotoって好きだなぁ。

470 名前:デフォルトの名無しさん :04/08/04 01:11
>>468
なんか目眩がするコードだな
例外が出た時点でオーバーヘッドなんて言葉はでないと思うんだが
例外処理は例外に使いなされ…

471 名前:デフォルトの名無しさん :04/08/04 01:24
>>468
func_throws_exceptions()が投げる例外オブジェクトに
counterの値を記録すればすむんじゃ?

472 名前:デフォルトの名無しさん :04/08/04 01:26
↑そういう問題じゃないんだな。
>>470が正しい。

473 名前:デフォルトの名無しさん :04/08/04 01:30
自演乙

474 名前:デフォルトの名無しさん :04/08/04 02:00
>>470
throwが重いのではなく、try/catchが重いから困ってるんですよ。
20万ファイル位あるディレクトリでファイルの情報を取得する処理なんですが、
スキップするためにファイルオープン時の例外をつかまえないとならないので・・・。

ループの中にtry/catchを入れると遅くなるのを回避したいのです。

475 名前:デフォルトの名無しさん :04/08/04 02:02
>>468
これって例外オブジェクト開放されんの?

476 名前:468=474 :04/08/04 02:04
>例外処理は例外に使いなされ…

の意味がいまいちわかんないのですが、
もしかして func_throws_exceptions のところで、
自分で if (hogehoge) throw exception; とかやってると思ってます?

472さんとかが理解してるような書き込みしてますが、
よければその辺ちょっと教えてもらえないでしょうか。

477 名前:デフォルトの名無しさん :04/08/04 02:10
>>474
> スキップするためにファイルオープン時の例外をつかまえないとならないので・・・。

本気か?例外を通常処理の分岐に使ってる時点で駄目
煽りじゃないぞ

478 名前:デフォルトの名無しさん :04/08/04 02:16
例外というのは例外的な処理を行うためのシステムなので、多用して重いと文句つけるのはアレだ。
ということでしょ。めったに起きない珍しい事態になんで効率を云々するんだと

479 名前:デフォルトの名無しさん :04/08/04 02:20
>>477
アクセス権が無いのも例外でない
ファイルが存在しないのも例外でない
何らかの障害によって開けないのも例外でない

例外って突き詰めてしまえば条件分岐なわけで
その言い分だと例外を使う事自体あってはならない事にならない?


480 名前:475 :04/08/04 02:21
駄目だここアフォしかいない

481 名前:468=474 :04/08/04 02:27
>>487 めったに起きない珍しい事態になんで効率を云々するんだと

それは関係ないと思います、実際に例外が発生しなくても
ループ内に try/catch が紛れ込んでいるだけで重くなるから悩んでるんです。
例外が発生したときだけ重くなるのなら、何も問題はありません。


482 名前:475 :04/08/04 02:28
tryで囲んだ時点で入り口と出口でコードが生成されるので重くなって当たり前。
でもIOの方が重いだろ多分。

483 名前:デフォルトの名無しさん :04/08/04 02:33
速度を求めるなら例外を使わない関数を使うっていうのは、
質問者の意図とちょっと違うでしょ。
嫌でも例外を使わされちゃう場面はあるわけで。

とりあえず、tryが結構いろいろやってることを知らない人はこれでも読んでください。
http://www.codeproject.com/cpp/exceptionhandler.asp

484 名前:475 :04/08/04 02:50
とりあえず例外あんま吐かないならこう書き直せ。
>>468の下じゃ例外オブジェクトのデストラクタとかが走らないから。

void enumfunc(int countstart, int countend)
{
for (int counter=start; counter<count_end; ++counter)
  func_throws_exceptions();

}

int counter = 0;

while(counter<count_end)
{
 try
 {
   enumfunc(counter, countend)
 } catch (std::exception&) {
   operations(counter);
   ++counter;
 }
}


485 名前:デフォルトの名無しさん :04/08/04 03:19
速度を求めるなら別の手段を考えるのは当然。
この場合ファイルの有無をチェックして、func_throws_exceptionsがフラグ返すだけでいいしな。

そもそも例外処理なんてのが作られた経緯を考えれば、
>>479みたいなアフォな意見はでないんだがなぁ。

>>484
おいおい、それじゃ例外が出たあとの処理が468の意図と違うだろ。
まぁ例外が出た時点で諦めろって感じだがな。

486 名前:485 :04/08/04 03:21
おっとすまん、読み違えてた。読みづらいなぁと言い訳。

487 名前:デフォルトの名無しさん :04/08/04 03:23
catchブロックから抜けたらデストラクタは呼ばれるんじゃないの?
コンパイラ依存?
と思って実験してみたら、vc++6ではcatchからtry内に飛べて、デストラクタが呼ばれるが、
vc++7.1では飛べねーよってことでコンパイルが通らない。

下のページの2を見ると、ANSI仕様では、飛べないのが正しいらしい。
http://www.codeproject.com/cpp/ANSI-cpp-dec96/except.asp


488 名前:デフォルトの名無しさん :04/08/04 03:23
>>485
有無だけでいいのか?

489 名前:デフォルトの名無しさん :04/08/04 03:31
485はnewが例外を投げるのすら許せないんだろうな。
たとえば.NETのFileStreamクラスとかでも例外投げてるんだし、
クラス製作者の分析センスに依存するというだけの問題だろう。

アフォとか読みづらいとか、人を貶す言葉しか出てないけど
いわゆる見下し厨というやつなのだろうか。


490 名前:デフォルトの名無しさん :04/08/04 03:36
まあ、現実的な解は、
try内にforを置いて、
for内で、例外が発生しそうか、ある程度チェックして、
そうならcontinue、そうじゃなくて例外が発生しちゃったら、
異常事態扱いであぼーんってな感じじゃないかと。

491 名前:デフォルトの名無しさん :04/08/04 03:42
例外で悩んでいると言う質問があれば、とりあえず
例外を分岐に使うなと煽るのはテンプレみたいなもんだ。

492 名前:デフォルトの名無しさん :04/08/04 03:52
しかしム板見てると自分がいかにレベル低いかが分かるよ・・・
大学のプログラムなんて研究用だからCでアルゴリズムばっかりだし、趣味でやってると細かいこと気にしないから上達しないし。
どうにかスキルアップしたいもんだ。

493 名前:470 :04/08/04 03:53
すごいスレが進んでるね、意外に支持派が多いのにびっくり

>>476
例外処理はやっぱりエラー処理を別に記述して
可読性を高めるのが本意だと思うよ、という意味ですよ>例外処理は例外に
この場合は特に横着してるだけだし、可読性最悪だしね

エラーってのは出た時点でそれまでの処理を全て中止するくらいの意味を持つと思うのね

おいらも説教厨とかいわれそうなので、薦めないけど一応ひとつ出しておくよ
20万ファイルじゃちと怖いけど

void func( int counter=0 ){
 try{
  for ( ; counter < count_end; ++counter )
   func_throws_exceptions();
 } catch (std::exception&){
  operations(counter);
  func( counter+1 );
 }
}

-----
func()

494 名前:デフォルトの名無しさん :04/08/04 03:54
>20万ファイル位あるディレクトリでファイルの情報を取得する処理なんですが、
>スキップするためにファイルオープン時の例外をつかまえないとならないので・・・。
statとかの例外投げないの直接呼べば?

495 名前:デフォルトの名無しさん :04/08/04 04:00
>>493
お見事!

496 名前:デフォルトの名無しさん :04/08/04 04:02
例外ってださいな

497 名前:デフォルトの名無しさん :04/08/04 04:04
470が横着せずに、493のレスを470の時点でしていれば荒れなかったなw

498 名前:デフォルトの名無しさん :04/08/04 04:12
スタックオ(ry

499 名前:デフォルトの名無しさん :04/08/04 04:33
今回の例とは違うだろけどロガーなんかの場合はエラーが
出たらそれを通知して続行するべきで処理を中断するわけにはいかないだろ。


500 名前:デフォルトの名無しさん :04/08/04 07:52
どう見ても問題は
func_throws_exceptionsでoperationsのコンボの仕様だろ?


■過去ログ置き場に戻る■ 1- 前250 次250 最新50
DAT2HTML 0.33f Converted.