■過去ログ置き場に戻る■
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.