[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 03/13 21:05 / Filesize : 260 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

スレを勃てるまでもないC/C++の質問はここで 3



1 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 20:07:56 ]
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。

過去ログ
スレを勃てるまでもないC/C++の質問はここで
pc11.2ch.net/test/read.cgi/tech/1167476845/
スレを勃てるまでもないC/C++の質問はここで 2
pc11.2ch.net/test/read.cgi/tech/1178503366/

596 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 23:21:37 ]
理由のところ、教えてくれませんか

なんで()つけないとダメなのか。
というか中身にアクセスするときは()つけた方がいいんでしょうか

597 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 23:28:44 ]
>>596
演算子の優先度

598 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 04:23:38 ]
*po++ は *(po++) という意味だから、だな

599 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 04:48:37 ]
俺は演算子の優先度の表を暗記するだけの頭脳がないので、
決して、
*po++ ;
なんてコードは書かない。
他人が書いたのを読まないといけないときは、優先度の表を見て確認する。

そもそも、後ろに++を付けるのは特別なときだけだし・・・。

600 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 13:39:19 ]
*++p

601 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 13:40:46 ]
++(*po);

602 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 20:56:27 ]
>>601
括弧イラネ

603 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 21:02:43 ]
優先順位覚えてないから付けといて

604 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 21:33:35 ]
左側に単項演算子二つで優先順位も糞もないだろ



605 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 21:52:24 ]
むしろ全ての演算子を単項演算子にすれば頭で思い浮かべたものをキャレットを一々前後させずに一気に書ける

606 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 21:55:25 ]
>>605
それって何て逆ポーランド記法?

607 名前:デフォルトの名無しさん [2007/10/28(日) 23:15:58 ]
★改行が多すぎと言われたので、何度かにわけます。

構造体Sのvectorがあって、SのメンバdoubleDataに関してfindをしようとしています。
(#include <algorithm>しています)

struct S{
string strA;
int intData;
double doubleData;
};

findを使っているところは、こんな感じです。
vector<S>::iterator it;
it = find(VecTest.begin(), VecTest.end(), 1.7);
cout << (*it).doubleData << endl;


608 名前:デフォルトの名無しさん [2007/10/28(日) 23:16:34 ]
★続き

Boland55で、以下のようなエラーが出ます。

エラー E2094 c:\Borland\Bcc55\include\algorith.cc 72: != 演算子が使われたがクラ
ス S では double 型のための定義が存在しない(関数 find<S *,double>(S *,S *,const
double &) )
警告 W8057 c:\Borland\Bcc55\include\algorith.cc 75: パラメータ 'last' は一度も使
用されない(関数 find<S *,double>(S *,S *,const double &) )
警告 W8057 c:\Borland\Bcc55\include\algorith.cc 75: パラメータ 'value' は一度も
使用されない(関数 find<S *,double>(S *,S *,const double &) )
*** 1 errors in Compile ***


609 名前:デフォルトの名無しさん [2007/10/28(日) 23:17:24 ]
★続き

ちなみに、以下のような演算子オーバーロードをしているのですが、
何がよくないのでしょうか。
bool operator == ( const S& left, const S& right )
{
return left.doubleData == right.doubleData;
}

bool operator != ( const S& left, const S& right )
{
return left.doubleData != right.doubleData;
}



610 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 23:32:46 ]
find には 1.7 じゃなくて S を渡さんといかんのでは?

611 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 23:34:03 ]
struct has_double
{
bool operator()(const S& s, double d) const
{
return s.doubleData == d;
}
};

find_if(VecTest.begin(), VecTest.end(), has_double(1.7));

612 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 23:36:44 ]
まちがった

struct has_double
{
double d;

has_double(double d)
:d(d)
{}

bool operator()(const S& s) const
{
return s.doubleData == d;
}
};


613 名前:デフォルトの名無しさん [2007/10/28(日) 23:44:17 ]
>> 612さん

コンパイル、通りました!すごい!!
でも全く解読できましぇん。
一語一句の意味をこれから勉強します。。。


614 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 23:55:56 ]
>>612
テンプレート使って、

template<double value>
struct has_double
{
bool operator()(const S& s) const
{
return s.doubleData == value;
}
};

find_if(VecTest.begin(), VecTest.end(), has_double<1.7>);

ってのではダメ?



615 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 00:00:45 ]
はは
定数だからね

616 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 00:13:48 ]
もっと簡潔・明瞭に書く方法ないのかなぁ。


617 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 09:53:08 ]
C++勉強しはじめてリファレンスを知って、
ポインタ使うよりずっといいじゃないですかって気分なんですが、
関数の引数としてリファレンス使うときに、

void hoge(int* out1, int* out2); //out2の出力が必要ない場合はout2としてNULLを渡す

のような仕様はリファレンスでは実現できないってことなんでしょうか?
毎回ダミー変数宣言して渡すのも馬鹿らしいし。

618 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 12:44:05 ]
>>617
どうしてもやりたかったらこういう手はどうだろう。
--
int dummyOut;

void hoge(int & out1, int & out2 = dummyOut)
{
if (& out2 != & dummyOut) {
out2 = someOutput;
}
}
--
ダミーは必要だけど、毎回じゃないし使わないときは出力処理を回避することもできる。

619 名前:かぜひいてます←寝てろ mailto:sage [2007/10/29(月) 13:39:10 ]
>>617
ダミー変数を渡すのがバカらしいのなら、ポインタ渡しのままでいいのでは?

参照は、結局ポインタ渡ししてるだけだから、組み込み型を渡すときはあまりメリットがない。
しかも、ポインタ渡しでも上手に組めば代入するのは1、2ヶ所だから読みにくくも無い。

俺のスタイルとしては、値を返すときは参照型ではなくポインタ渡し。

参照型が活きるのはクラス等を渡すとき。
void hoge(vector<char>& ref_v);
void hoge(const vector<char>& ref_v);

メンバアクセス演算子( . -> )がオーバーライドされてる場合でも深く考えなくともよい。


620 名前:619 mailto:sage [2007/10/29(月) 13:44:56 ]
>>618
それも一応考えてみた。他にもオーバロードって手もあるよね。

621 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 14:30:48 ]
int val = 100;
val = val++;
int result = val;

このとき、result はいくつになりますか?
また、処理系に依存せず、同じ値になりますか?

622 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 14:44:58 ]
>>621
www.kouno.jp/home/c_faq/c3.html#3

623 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 14:47:49 ]
>>622
おぉ。ファック。
なんてこった。
ありがとう。

624 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 14:57:30 ]
ファックしてもいい?



625 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 00:59:37 ]
>>572
超遅レスで申し訳ない。

VB自体は糞というわけではないのか。。

もし、また改めて勉強するとするならば、VisualC++とVisualC#はどちらがお勧めですか?
もちろんどんな物を作るか、目的は何か、ってのが決まっててこそ選ぶのかもしれないけど、
もし、将来性等考えたらどっちになります??


626 名前:デフォルトの名無しさん [2007/10/30(火) 01:01:04 ]
VisualC#

627 名前:625 mailto:sage [2007/10/30(火) 01:06:12 ]
検索したらいっぱい出てきたんでとりあえず色々眺めて決めます。


・・とおもったらレスがついてた。
>626
なぜですか?よかったら教えてほしいです。

628 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 01:26:32 ]
自動車に例えるなら、

C# → トヨタ自動車本社の設計技術者
C++ → トヨタに部品を収めている協力会社の設計技術者

そういう感じ。

629 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 01:41:21 ]
…え。

630 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 06:09:37 ]
C# → Windowsユーザー
C++ → マイクロソフト

631 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 10:29:36 ]
>>628
確かに C++ の方がスキルが必要だから間違ってないね。

632 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 10:36:13 ]
.NET Frameworkって「のり」があるからC#, C++, F#とどれも使えるのが一番だね
状況に応じてシームレスに言語を選択できる開発環境ってのはかなり美味しいだろう
さらにPowerShellスクリプトも使えば窓も*nix系に匹敵するかなり強力な環境になると思う

633 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 12:24:06 ]
んじゃ、
C→町工場の工員
こんなかんじか?

634 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 13:09:12 ]
C→拡張しすぎてわけがわからなくなった、おじいちゃん技術者




635 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 15:43:19 ]
質問させてくださいー・・・。

Visualstudio2005のC++でCのソースをコンパイルしているんですけど、
off_t strip_offset, data_offset, curve_offset;
off_t thumb_offset, meta_offset, profile_offset;
の2行で構文エラーって出るんです。

error C2061: 構文エラー : 識別子 'strip_offset'
error C2061: 構文エラー : 識別子 'thumb_offset'

ココだけ見てもわかんねーよって感じでしょうか・・・。
なんとなく原因が雰囲気でも分かれば教えてください。


636 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 15:47:08 ]
>>635
off_tのtypedefを探して貼れ

637 名前:635 mailto:sage [2007/10/30(火) 16:11:04 ]
レスありがとうございます。

typedef、存在しないみたいです。
設定しなきゃ駄目ですか?

638 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 16:14:16 ]
typedefが存在しないわけがなかろう。
off_tは予約語じゃないぞ。

639 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 16:16:33 ]
それか、struct off_t strip_offsetとして使うべきものかも。

640 名前:635 mailto:sage [2007/10/30(火) 16:21:06 ]
>638
off_t、ココにしか出てこない上にtypedefってのも無いんです。
元々Linux用(?)に書かれたソースらしいんですけど、そっちではちゃんと動いているみたいなんですけど・・・。
すみません、いまいちよく分かってなくて。とにかくtypedefしなきゃ駄目って事でしょうか。

>639
struct off_t strip_offsetみたいにしてみたんですけど、、エラーが出ちゃいますね・・・。
「error C2079: 'strip_offset' が 未定義の struct 'off_t' で使用しています。」
だそうです。

641 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 16:26:44 ]
>>640
じゃあそのソースがインクルードしているソースやヘッダを
全部調べてoff_tの定義を調べるべきだな。

642 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 16:28:04 ]
もしかしたらtypedefではなく#defineかもしれない。

643 名前:635 mailto:sage [2007/10/30(火) 16:33:32 ]
>614
インクルードされているファイルって言うと#include <winsock2.h>みたいなやつですよね?
全部調べていくのはちょっと自分には難しいかもしれません。

そっちに原因があるということだったら、コンパイラを変えてみると何とかなるかも、ですか?
MinGWとかでコンパイルできるか試してみます!

>642
#defineもありませんでした。>635に書いた2行以外のどこにも出てこないんです。


644 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 16:34:14 ]
#include <sys/types.h>



645 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 16:38:35 ]
>>643
off_tでぐぐるぐらいの事はしてみたよな?

646 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 16:38:56 ]
typedef long off_t;

647 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 16:40:53 ]
>>635
検索を使ってちゃんと探してみたか?
俺は自分の環境で探してみつかったぞ。
しかも難しい定義でもなんでもなかったぞ。
答えは言わない。自分で環境全部きちんと探して。


648 名前:647 mailto:sage [2007/10/30(火) 16:45:36 ]
答えでちゃったね。
VS C++のファイル検索使えば全検索でも何分もかからないのに。
いずれ仕事にするならそれぐらいはきちんと覚えておいて。

649 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 17:01:56 ]
>644
その記述を入れたらoff_tに関してのエラーは出なくなりました!ありがとうございます。

>645
ググって、検索結果のページも色々参照させてもらったんですけど、なにぶんCそのものについての知識がなさ過ぎて・・・。すみません。

>646
その記述を入れてもoff_tに関してのエラーは出なくなりました!ありがとうございます。

>647
ありがとうございます。皆さんに助けていただいてひとつ前に進めました。
まだエラーが出てるんで先は長そうでけど・・・。

650 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 20:50:14 ]
理解しないで使うには危険な言語だと思うぞ。


651 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 12:14:47 ]
>>649
「その記述を入れたら出なくなった」じゃなくて、
なんでエラーが解消できたのかを知っておかないと
これから先苦労するぞ。

652 名前:デフォルトの名無しさん [2007/10/31(水) 18:09:26 ]
Win32環境+VS2005で開発を行っています。
ダブルクリックでファイルを開く処理に対応させようと頑張っていた所
Debugビルドでは成功したのですが、Releaseビルドにするとファイルを開かなくなりました。
(でもショートカットに開きたいファイル名を指定するとReleaseビルドでもきちんと開く)

そこで処理を追っていくと、どうもInitInstanceメソッドが呼び出されていないようなのですが、似たような経験をされた方はいらっしゃらないでしょうか?


653 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 18:11:41 ]
スレ違い

654 名前:652 [2007/10/31(水) 18:27:32 ]
了解しました、他スレに流れてきます。



655 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 18:59:54 ]
グリッド状に3次元ボクセルが並んでいる座標を格納したファイルがあって
0 0 0
1 0 3
5 20 9
…(順番はメチャクチャ)

ttp://up2.viploader.net/upphp/src/vlphp083780.jpg

こういう感じに1層だけ取り出して計算処理。
終わったらその上の層だけ取り出して計算処理

ということをしたいのですが

これって

for(slice=0,slice<MAX;slice++){
while(fscanf(fp,"%d%d%d\n",x,y,z)!=EOF){
array[x][y][z]に層を格納
}
格納した層について計算処理
}

という風に、計算したい層を取り出すために、毎回ファイルを読み込むという賢くない処理をしなくてはならんでしょうか
もう少し賢いやり方をしたいのですが、アドバイスいただけませんか。

656 名前:デフォルトの名無しさん [2007/10/31(水) 19:28:37 ]
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5186.txt

これに実験結果を入れたいのですが、どこに入れたらいいか分かりません。
教えてください。

657 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 19:30:04 ]
>>656
コンパイルして、./a.out 実験結果 とでもすればいいだろ。

658 名前:wolf ◆8VH3XAqjlU mailto:sage [2007/10/31(水) 21:09:30 ]
>>655
For your Reference.

Managing Memory-Mapped Files in Win32
msdn2.microsoft.com/en-us/library/ms810613.aspx

Beej's Guide to Unix Interprocess Communication(Ref. Memory Mapped Files)
www.ecst.csuchico.edu/~beej/guide/ipc/

659 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 21:47:11 ]
>>658
thanks for your advice

but I don't mention accessing memory
and that code was rough. so I have some mistake



660 名前:デフォルトの名無しさん [2007/11/01(木) 01:31:10 ]
「派生クラスのインスタンスを生成する時、newで生成しないと使えない」
と言われたのですが、何でなのかわかりません。

  親クラス* p= new 子クラス;
  p->なんか関数();

これしか方法はないんですか?

661 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 01:39:13 ]
>>660
そんな事はない

662 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 05:49:28 ]
>>655
データ量にもよるが・・・

ファイルの読み書きと計算処理を分離し、
データはすべてメモリに読んでしまい、
計算処理はメモリ上にあるデータに対して行う。
いくつもの計算処理を済ませた後に、
メモリからファイルに書きだす。

663 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 10:38:55 ]
子クラス kokurasu;
親クラス* oyakuasu = &kokurasu;
oyakurasu->NFunction();

664 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 16:13:54 ]
>>662さん
レスありがとうございます。
小さいデータ量なら3次元配列に読み込んでしまえばいいのですが
量がメモリの容量を越えてしまうくらい大きいので…

2048×2048×2048の大規模なものや、それ以上を想定しています。。。

メモリに乗り切らない→1層ずつ処理→そのためには?
という考えからきています



665 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 16:34:53 ]
ファイルを何度もスキャンするくらいなら、
物理メモリに乗らないような巨大なサイズでも、
仮想記憶を使ってメモリ上に読んでしまったほうがマシかもよ。



666 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 17:00:46 ]
>仮想記憶を使ってメモリ上に読んでしまったほうがマシかもよ。
仮想記憶で扱うということはこれまでやったことが無くて。
どこかわかりやすく参考になるところありますか?

667 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 17:02:15 ]
>>666
ja.wikipedia.org/wiki/%E4%BB%AE%E6%83%B3%E8%A8%98%E6%86%B6

668 名前:デフォルトの名無しさん [2007/11/01(木) 17:15:27 ]
教えてください。

(Aが1)、かつ(Bが2)以外に処理を実行するっていう場合どう記述したらいいんですか?


if((A==1)&&(B==2)){

}
else{
  処理
}

でいいのかなぁ?



669 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 17:17:15 ]
ありがとうございます。
だいぶ難しそうな気配がしています。。。


670 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 17:19:27 ]
if( (A!=1)&&(B!=1) )
処理

でいんでない

671 名前:よろず [2007/11/01(木) 17:21:39 ]
募集してるよん♪
bloom@geocities.co.jp

672 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 17:22:21 ]
if((A!=1)||(B!=2))
{
処理
}

673 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 17:22:36 ]
よくねぇよ

674 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 17:23:05 ]
>>668
ド・モルガンの法則でひっくり返せ。

A != 1 || B != 2



675 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 17:23:24 ]
>>668
if( !(A==1 && B==2) ) {
 処理
}

676 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 17:23:40 ]
更新してなかtったorz

677 名前:デフォルトの名無しさん [2007/11/01(木) 17:23:51 ]
ありがとう || でやってみます

678 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 17:24:41 ]
>>666
高々GiBオーダだろ。普通にmalloc()したらOSが勝手に確保してくれて、使うときに勝手にスワップアウトしてくれるよ。
OSがタコじゃなきゃ。

679 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 17:26:13 ]
WindowsXPはタコですか?

680 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 17:26:41 ]
>>677
果たして、>670で「(Aが1)、かつ(Bが2)以外」と読めるか?
if (!(A == 1 && b == 2)) {
処理
}
の方が読みやすいかも知れんぞ。
# ド・モルガンの定理を知らん香具師がメンテナンスするかもしれないんだし。

681 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 17:28:59 ]
「(Aが1以外)且つ(Bが1以外)」と読める

682 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 17:29:48 ]
どっちも同じようにしか見えない俺は眼が腐ってる

683 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 17:30:11 ]
だね

684 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 17:49:50 ]
「(Aが1以外)且つ(Bが1以外)」じゃないの?



685 名前:デフォルトの名無しさん [2007/11/01(木) 17:52:10 ]
if( !(A==1 && B==2) ) {
処理
}

こういう記述もできるんですね

みなさんありがとう 勉強になりました

686 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 18:25:35 ]
>>680
読みやすさとかより
!(A == 1 && b == 2)) と (A!=1)&&(B!=1) は別物なんだが。

687 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 18:30:38 ]
そりゃそーだ
Bの値が違う

688 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 18:47:54 ]
>>678
ためしにmallocで 1024 1024 1024 を確保して解放しただけで仮想メモリの警告が出ましたが
確保をしているような感じでした。
ただ、合計4GBくらいになるはずのものが2.5GBで解放されたのが気になりますが。。。


もう少し別のやり方調べてみます。。。

689 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 19:12:47 ]
>>688
Windowsの32ビットアプリケーションは、
3GiBオプションを付けない限り、ユーザアドレス空間2GiBしかないよ。
その2GiBをプログラム本体や、WindowsのDLL、スタックを差し引いた残りが、
およそmallocほか動的メモリ確保で使用できる領域になる。

それ以上使いたければ、64ビット化するか、2GiB未満に小分けして処理する必要がある。
いずれにせよ、同じ仮想記憶を使うのでも、
単純にmallocでメモリを確保するよりは、メモリマップドファイルにしたほうがいいと思う。

690 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 20:02:10 ]
>>687
それだけ?

691 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 20:34:15 ]
うぜ

692 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 22:00:13 ]
>>689
動的メモリになると2GBの壁がでるのですね…

それだと必然的に1024^3はムリになるので、目的のは出来ないかもしれません
ファイルにランダムアクセスできればいいのですが…
それかファイルをソートする方がはやいのかも

693 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 22:05:34 ]
>>692
ランダムアクセスはできるよ
テープじゃないんでしょ

694 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 22:07:58 ]
テープですよ
ランダムアクセスはできるけど



695 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 22:17:07 ]
>>692
流れをあんまり理解してないけど、
ファイルにランダムアクセスってfseekとかその手の話?

696 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 22:19:59 ]
まさか数GBのファイルを全部メモリに読むつもりとか

697 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 22:20:04 ]
そのファイルはテキスト?

698 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 22:21:37 ]
層毎に読み込むのがいいよ

699 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 23:21:22 ]
>>655のことです
層ごとに読み込みたくて。

15GBくらいのデータを縦軸・横軸の層で読み込んで計算したくて伺っていました。
テキスト形式のデータで要素数にして数億個のデータです。


700 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 23:39:36 ]
なんで一度に読み込みたいのかがわからん。
ある層の計算をするときは、他の層がどうなってるかは知らなくていいんじゃないの?

逐次的に計算できるなら、何億個、何兆個データがあっても関係ないでしょ?

701 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 23:40:03 ]
層順にソートしておくとか

702 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 23:44:40 ]
何層あるのか知らないけど、元ファイルを順次読み込み、層ごとのファイルに分ける。
slice001.txt, slice002.txt, ... みたいに。
で、それぞれのファイル毎に層毎の計算をする。

で、ダメ?

703 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 23:45:52 ]
>>700
一度に読み込まないための方法を探してるんです。

>>701
それは考えました。
縦方向に層を作るのであればZだけでソートしたファイルを読み込み処理ですむのですが
横方向に層も必要で
最悪2つの15GBのデータを作らないといけなくなりそうです。



704 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 23:47:23 ]
あー、2k*2k*2k程度を想定してるのか。
層ごとに分けてしまえば次元が一つ減るから、オンメモリでいけるでしょ。



705 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 23:48:41 ]
めんどくせーから、64bitOSにしちゃえよ

706 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 23:49:57 ]
めんどくせーから、諦めちゃえよ

707 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 23:51:50 ]
めんどくせーからDBにしとけ

708 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 23:56:27 ]
>>703
> 横方向に層も必要で
おいおい、必要な情報は一度に開示しとけよ。

709 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 23:59:58 ]
>>708
はい、すみません。

縦方向の層/横方向の層 でスライス作って計算するのが一番速そうですね。
始めは15GBの3次元の塊から、層を2次元配列で確保していくつもりでしたが

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

710 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 00:43:29 ]
> (Aが1)、かつ(Bが2)以外に処理を実行するっていう場合どう記述したらいいんですか?

どーみても、
if ( (A==1) && (B!=2)) {
処理
}
だろ。

それとも日本語が不自由なのか?

711 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 00:45:03 ]
668の例を見てそう言えるお前のほうが不自由

712 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 00:45:12 ]
うは亀レス
日本語が不自由なんですね

713 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 00:45:41 ]
もうその話題終わったよ

714 名前:デフォルトの名無しさん [2007/11/03(土) 01:41:40 ]
実体のまだないData型のpDataAというクラスが、ポインタで関数DataA_Setupにわたってきます。
DataA_Setupの中で、実体化(new)して、いろいろ値をつめます。
次に、このpDataAを、別の処理関数DataA_Modifyにわたして中身を書き換えるのですが、
DataA_Modifyのインタフェースが、Data型の参照を受けているのです。

int DataA_Setup(Data* pDataA)
{
pDataA = new Data();
// pDataAにいろいろ値をセット

    DataA_modify(ここが、Data型の参照になっている);





715 名前:デフォルトの名無しさん [2007/11/03(土) 01:45:14 ]
>>714の続き
で、DataA_modifyにpDataAを渡すには、どのように変換すればいいのでしょう。

Data rDataA = &pDataA;

とすると、
error: conversion from `Data**' to non-scalar type `Data' requested

とエラーが出ました。

716 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 01:48:22 ]
*pDataA でいいんではないの

717 名前:デフォルトの名無しさん [2007/11/03(土) 01:51:06 ]
ありがとうございます。

DataA_modify( *pDataA );

で通りますか?

718 名前:デフォルトの名無しさん [2007/11/03(土) 02:35:35 ]
ゲームに制限時間を付けたいんですが、どうすればいいのか
わかりません。


719 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 04:52:32 ]
>>714
> 実体のまだないData型のpDataAというクラスが

「クラス」???
基本的なことを理解していないっぽいな。

> ポインタで関数DataA_Setupにわたってきます。

実体がないのに、どうしてポインタが渡せるんだ?

そして案の定、

> int DataA_Setup(Data* pDataA)
> {
> pDataA = new Data();

なんていう変なことをしている。

引数の型はData*ではなくData**か、Data*&にしないと。
pDataAに何を代入したって、DataA_Setupの呼び出し側には伝わらないぞ。

> Data rDataA = &pDataA;

わかってなさすぎ。

720 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 08:39:58 ]
>>718
あなたがどんなゲームをどのように作っているのか判らないので「こうしなさい」などとおこがましいことは言えません。

721 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 16:40:26 ]
>>714
>>719のとおりだなあ。
とりあえずC++ Primerと初心者本を買って理解することをお勧めする。

722 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 16:35:46 ]
二次元配列で
foo[たて][よこ]
を走査したいのですが
どんなループが一般的にやられてますか?

723 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 16:39:32 ]
ふつう

for(y = 0;y < たて;y++){
for(x=0;x < よこ:x++){
}
}

724 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 16:40:09 ]
二重ループ



725 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 16:58:20 ]
>>723-724
ありがとうございます。

あとすいません、言葉足りなくて
foo[][]を

行だけ取り出して、計算→次の行へ。
列だけ取り出して、計算→次の列へ

ということです。



726 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 17:01:18 ]
>>725
for(y = 0;y < 列;y++){
for(x=0;x < 行:x++){
}
}

for(y = 0;y < 行;y++){
for(x=0;x < 列:x++){
}
}


727 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 17:05:07 ]
…そうだ。そうですね
なんか変に考えすぎてました。

ありがとうございます

728 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 02:03:47 ]
if(条件1){処理1}
else if(条件2){処理2}
else if(条件3){処理3}
else if(条件4){処理4}
else{処理5}

という処理をやりたいのですが、ネストは3までと決められているので、このままの形では書けません
なんとかスマートにネストを減らしたいのですがどうするのがいいのでしょうか
今は仕方なくこんな風に書いてるんですが、不格好だし面倒くさいし…

int flg;
if(条件1){flg=1}else{DoNothing();}
if(条件2){flg=2}else{DoNothing();}
if(条件3){flg=3}else{DoNothing();}
if(条件4){flg=4}else{DoNothing();}
if(条件5){flg=5}else{DoNothing();}
switch(flg)
{
 case 1:処理1;break;
 case 2:処理2;break;
 case 3:処理3;break;
 case 4:処理4;break;
 case 5:処理5;break;
 default:DoImpossible();break;
}

729 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 02:07:49 ]
ごめんなさい
条件の方のflg=*にセミコロン忘れました

730 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 02:17:22 ]
>>728
ネストが3ということだが、一番はじめに提示したソースはネストは1じゃないか?
普通かどうかしらんが、俺の感覚でネストが深くなるといわれると
if ( XXX ) {
if ( YYY ) {
if ( ZZZ ) {
}
}
}
ということだと思うんだが?

731 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 02:20:14 ]
一応、回避策(?)も提示してみる。
int Check( void ) {
if ( 条件1 ) return 1;
if ( 条件2 ) return 2;
if ( 条件3 ) return 3;
if ( 条件4 ) return 4;
if ( 条件5 ) return 5;
return -1;
}
/**/
switch( Check( ) ) {
case 1://以下略
}

732 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 02:22:28 ]
else if{〜}はelse{if{〜}}のことなので、最初のソースのネストは5なんです
正直納得いかないんですが、コードチェッカがそう言って怒るので仕方ありません

733 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 02:28:20 ]
>>731
結局条件を数値に直してswitchしかないんですかね
elseは必ず書くことになってるので正直あまり変わらない気がします。ごめんなさい

734 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 02:33:01 ]
そのコードチェッカーは必ず、例外なく、何があっても、守らなければいけないもの?
可読性や汎用性やテスト容易性まで犠牲にしてまで守る利点はあるの?
っていっても、守らなきゃならない状況ってのはあるんだろうけど・・・
関数分割をなるたけして、厳しい部分はswitchに落とすしかないかな?



735 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 02:40:00 ]
>>733
elseはcase -1:でよくね?-1じゃなくてもなんでもいいけど。
条件の内容次第ではうまくいく場合もあるよ。
例えば、文字列比較によって関数呼び出しを行うなら・・・
typedef sturct {
const char * str;
void ( * func )( void );
} T_HOGE;
const T_HOGE Hoge[ 3 ] = {
{ "right", Func1 },
{ "center", Func2 },
{ "left", Func3 },
};
for ( cnt = 0; cnt < 3; cnt++ ) {
if ( strcmp( Hoge[ cnt ].str, input ) == 0 ) {
Hoge[ cnt ].func( );
}
}
条件が複雑になれば厳しくなるけど・・・

736 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 02:41:57 ]
bool notYet = true;
if (notYet && condition1) {process1; notYet = false;}
if (notYet && condition2) {process2; notYet = false;}
if (notYet && condition3) {process3; notYet = false;}
...

737 名前:1/2 mailto:sage [2007/11/14(水) 05:31:15 ]
#include <utility>
#include <vector>
#include <iostream>
#include <functional>

struct func_holder : public std::unary_function<void,void> {
  typedef result_type (*func_type)(argument_type);
  func_holder( func_type f ) : m_func(f) {};
  result_type operator()(argument_type) const { return (*m_func)(); }
private: func_type m_func;
};
struct pred_holder : public std::unary_function<int, bool> {
  typedef result_type (*func_type)(argument_type);
  pred_holder( func_type f ) : m_func(f) {};
  result_type operator()(argument_type a) const { return (*m_func)(a); }
private: func_type m_func;
};
template< class Pred, class Func >
struct dispatcher
 : public std::unary_function<typename Pred::argument_type, void> {
  typedef std::pair<Pred, Func> pair;
  typedef std::vector<pair> vector;

  void add(pair const& p) { v.push_back(p); }
  void operator()(argument_type a) {
    for (vector::iterator i = v.begin(); i < v.end(); ++i) {
      if ( i->first(a) ) { i->second();break; }
    }
  }
private: vector v;
};

738 名前:2/2 mailto:sage [2007/11/14(水) 05:34:32 ]
void out1() {
  std::cout << "out1!\n";
}
void out2() {
  std::cout << "out2!\n";
}
bool pred1(int i) {
  return i > 0;
}
bool pred2(int i) {
  return i == 0;
}
int main() {
  dispatcher<pred_holder, func_holder> dis;
  dis.add( std::make_pair(&pred1, &out1) );
  dis.add( std::make_pair(&pred2, &out2) );
  dis(0);
}

.*_holderで指定する関数の方を変えてやったり、predのargumentとして状態を保持した構造体を渡すようにすれば
もっと複雑な条件でも使えるかもしれない
boostを使えば使い勝手が良くて読みやすいのが作れる?

739 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 16:11:34 ]
>>734
必ず守らなければならないとしたときの利点:
  お前のように、ごちゃごちゃ文句言う奴に対応する時間を取らなくて済む

740 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 16:18:34 ]
>>739
必ず守らなければならないとしないときの利点:
  お前のように、ごちゃごちゃ文句言う奴に対応する時間を取らなくて済む

741 名前:738 mailto:sage [2007/11/14(水) 17:59:11 ]
よく考えるまでもなく激しく車輪の再発明してる気になるなぁ(それ以前にC++)
これと同じようなものが「boostにあるよ」とか「lokiにあるよ」とか「俺が作ったよ」とかあれば
是非情報をおながいします

あとこういうのって、デザパタ用語で責任の連鎖パターンっていうんですか?

742 名前:デフォルトの名無しさん [2007/11/14(水) 21:50:49 ]
コンソール上で動かすプログラムを作っています。
画面消去の方法で『ESC [2J』と解説されてるサイトが多いのですが、
XPではエスケープ・シーケンスが使えないようなのです。
他に画面消去に使えるような命令はないでしょうか?
コンソール画面上をスペースで塗り潰す以外の方法は無いのでしょうか。

743 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 21:51:38 ]
プログラムを書くというのは、特殊化だと思う。
だから、汎用に書くのは間違い。

可読性を損なわないようにベタっと書くべき。

744 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 21:55:55 ]
DRY原則は守ってね



745 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 22:09:17 ]
>>742
Win32APIスレで質問すべし。

746 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 22:13:36 ]
APIじゃなくてもclsでよくね?

747 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 22:18:55 ]
そこでPDCursesですよ
単にコンソールIOのシステムコールをCursesのインターフェースでラップしただけだけど
そのまま使うよりは使いやすいような使いにくいような

748 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 22:25:05 ]
血圧が高くて疲労感が取れません。

749 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 03:23:46 ]
A.cpp
CSample *Sample = 〜〜〜


B.cpp
Sample->Loop();

という風にしたいんですが
どうにかしてB.cppでSampleオブジェクトを使う方法はありませんか

750 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 04:30:17 ]
>>749
グローバル変数


751 名前:デフォルトの名無しさん [2007/11/15(木) 04:45:48 ]
windowsでC言語の開発環境を整えようと思いbcpadをダウンロードしようとしたのですが、
ベクターでダウンロードできなくなっており、自身で探してみたのですが、ダウンロードできるサイトが見つかりません。
ご存知の方がいらっしゃいましたら教えてください。

752 名前:デフォルトの名無しさん [2007/11/15(木) 10:28:55 ]
>>751
シェアウェアにするとかなんとか書いてるから
フリーのVC++2005expとSDKでやれば?
ANSIIの関数で複数の関数が
警告で「安全性がなんたらかんたら・・・」って警告
でるけど、別に関数の使い方間違ってなかったら
問題無いし、C言語の開発環境としては
VC++2005で十分気軽に使えるでしょ

753 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 21:04:22 ]
配列の要素数をsizeof演算子で得ることができるということは理解できるのですが
配列のポインタから、そのポインタが指す配列の要素数を得ることはできるのでしょうか?

754 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 21:22:21 ]
>>753
できない。



755 名前:753 mailto:sage [2007/11/16(金) 02:27:16 ]
ありがとうござました

756 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 19:26:34 ]
WikibookのMore C++ Idiomsって更新されてるの?
10項目ぐらい聞いたことも無い名称が出ててとても気になるんだけど・・・

757 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 19:29:58 ]
更新履歴みればいいじゃない

758 名前:デフォルトの名無しさん [2007/11/17(土) 19:50:02 ]
コンストラクタなんですが

クラス名::クラス名() : クラス変数名(値){
// 以下コード
}

みたいな宣言をされているのですが、「:」以降の文法の意味が分からないのですが・・・。
クラス変数の型は、インクルードしている他のクラスです。

759 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 19:52:17 ]
初期化してるだけ
class A{
 int a;
 A();
};
A::A(): a(1) {
}
の場合、Aのメンバ変数aは1で初期化される

760 名前:デフォルトの名無しさん [2007/11/17(土) 20:02:35 ]
なるほどです。
手持ちの本では載っていなかったので。
ありがとうございます。


761 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 00:07:18 ]
その本が入門書であるなら窓から投げ捨てたほうがいい。

762 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 03:02:02 ]
未だにこんなコード載せてる本がたまにあるから困る
間違いだからなこれ
A::A(){
 a=1;
}

763 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 07:34:46 ]
int a=1 ;
ってのも間違いで、
int a(1) ;
にしろってか?

764 名前:デフォルトの名無しさん [2007/11/18(日) 07:40:24 ]
どこが?



765 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 07:54:07 ]
>>762
間違いってほどでもないな。効率が悪いってだけで。

効率の悪さよりも保守性のために、
あえて初期化リストを使わないという選択もあるよ。

多数のコンストラクタがある場合、
同じ初期化リストをコピペすることになる。

コンストラクタ内で代入するのであれば、
共通した代入をprivateなメンバ関数にできる。

766 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 08:00:24 ]
>>765
それはクラス設計が悪い

同じように初期化するメンバで1つクラスにして、それを継承すべし

767 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 08:53:40 ]
>>763
その2つは同値な表記
A::A():a(1){}とA::A(){a=1}は意味が違う
まあint型くらいなら大して変わらんけどさ

768 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 10:02:10 ]
>>766
アンチパターン

769 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 11:01:06 ]
>>766
継承はやりすぎ
包含で十分

770 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 11:02:24 ]
>>767
意味が違うのなら、どちらが正しいかなんて言えないよな

771 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 11:04:58 ]
クラスだとコンストラクタとコピー代入演算子が違う意味を持っているから初期化子に馴れておいた方がいい。
さらにstatic/constが絡んでくると初期化子の方が合理的だと思えるようになるよ。

772 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 11:14:04 ]
説明がド下手

773 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 11:52:42 ]
C++での質問です

EA001 80
EA002 60
EA003 100
EA004 0
EA005 50

みたいな感じに学籍番号と整数値が与えられているテキストファイルを読み込んで、
整数値をソートして行ごとに並べ替えるプログラムを作りたいのですが
どのようにテキストファイルを読み込めばいいのか教えてください。

774 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 11:56:49 ]
#include <fstream>

std::fstream f("ファイルのパス.txtxtxtxt", std::ios::in | std::ios::binary);

void *buff new char[適当な数];

f.read((char*)buff, 読み込むサイズ);



775 名前:デフォルトの名無しさん [2007/11/18(日) 11:59:31 ]
>>774
バイナリで読み込む必要ない
あとソートはSTLのmapとかsetだと読み込めばソート完了する

776 名前:デフォルトの名無しさん [2007/11/18(日) 15:32:20 ]
Visual C++ 2005 Express Edition で、PCのイベントログをとってくるには
どうしたらいいんですか?

777 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 15:59:26 ]
>>776
Win32API質問スレへどうぞ。

778 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 16:01:51 ]
>>776
Win32APIのReadEventLogを使う。

WMIあたりにもっと便利なのがあると思うが、
その質問の仕方を見ていると使いこなせるか疑問。

779 名前:デフォルトの名無しさん [2007/11/18(日) 19:28:29 ]
>>777-778
すみません。ありがとうございます。
おっしゃる通り、C言語すら知らないド素人です。
Win32APIとやら・・・Cの基礎を知ってないと駄目なほどのものを使わないと
できませんか・・・Windowsのイベントログだから考えてみればそうですよね・・
ありがとうございました。

780 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 22:11:53 ]
Cの基礎を知らないでVisual C++でまともなプログラムを作るのはそもそも無理だろWin32APIがどうこういう前に

781 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 11:13:10 ]
>>779
とやらって…。Win32APIは別にCの基礎じゃない。

782 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 23:49:41 ]
>>781
日本語読めない人ですか?
779は Win32API = Cの基礎を知ってないと駄目なほどのもの って言ってるんであって
Win32API = Cの基礎 だなんて一言も言ってないだろ。

783 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 00:15:24 ]
そんな必死にならなくてもいいのに

784 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 00:17:31 ]
と言う事にしたいのですね:-)



785 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 01:44:13 ]
いいえ、事実です。

786 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 02:25:22 ]
1,2、たくさんとしか数えられないから、三行以上の書き込みが必死に見えるらしい。

787 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 12:34:12 ]
>>782
Win32APIがCの基礎を知ってないと駄目なほどのもの?
笑わせてくれるぜ。

788 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 13:19:02 ]
Win32APIがCの基礎を知ってないと駄目なほどのものって言ってるのは782じゃなくて779だろ。
782は781の読み違いを指摘してるだけ(煽ってるともいう)なのに、なんで782に絡むんだよw

789 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 13:23:47 ]
そんなことよりみんなで乱交パーティしようぜ

790 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 13:29:54 ]
そんなどうでもい話で盛り上がってんなよ

791 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 13:42:43 ]
新しいネタもないし別にいいんじゃね?
どうしても話題変えたかったらなんか質問でもしなよ

792 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 15:18:08 ]
C++で、stringに入力した文字列をint型に変換する方法が分かりません。
atoi()を使うとエラーが出てしまいます。

793 名前:デフォルトの名無しさん [2007/11/20(火) 15:19:08 ]
string s="123456";

cout << atoi(s.c_str());

794 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 15:29:00 ]
string s="123456";
int i;
istringstream(s) >> i;



795 名前:デフォルトの名無しさん [2007/11/20(火) 15:39:01 ]
代入演算子で、整数変数に浮動小数点をかけ算するとき、ワーニング出ないようにするにはどうすればいいの。
int value=10;
value *= 0.5;


796 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 15:45:22 ]
整数演算に直す。
value /= 2;

797 名前:デフォルトの名無しさん [2007/11/20(火) 16:15:33 ]
WindowsAPI使えば、スタンバイとか自分の好きな風にカスタマイズできますか?

PCのスタンバイ設定が気に入らないので。

798 名前:デフォルトの名無しさん [2007/11/20(火) 16:16:42 ]
レジストリだろう

799 名前:デフォルトの名無しさん [2007/11/21(水) 08:51:30 ]
double型・float型っていくらの整数まで厳密に保持できると保証されてるんでしょうか?
(桁が上がっていくと1の位を保持できなくなるわけですよね)
具体的にはunsigned intの最大値までそれぞれ保証しているのか知りたいのです。

800 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 09:29:21 ]
>>799
それぞれの仮数部のビット数を調べればいい。
結論から言えば、一般的にdoubleは53bit、floatは24bitとなる。
従って、一般的な4バイト整数と較べた場合、floatは精度が足りないと言うことになる。

801 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 12:50:50 ]
>>800
なるほど、納得です!
ありがとうございました。

802 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 22:31:20 ]
保障はされてなかった気がする

803 名前:デフォルトの名無しさん [2007/11/22(木) 01:15:33 ]
質問です。
今自分はCからFORTRANにする事をしていて、
wgtinit(w,s1,inival,flag) /*initialize random weight matrix*/

drawrest(xps+50,50,200,200,yellow)

line(xp,250,xp,yp,white,0,0)
といのがCのプログラムの中で出てきたのですが、これはどういう意味で、
これをFORTRANで表現するにはどうしたらいいのでしょうか?


804 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 01:24:43 ]
>>803
我々はエスパーじゃない。



805 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 01:27:41 ]
>>803
お前みたいなのを雇うなんて会社の程度が知れてるな

806 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 01:39:29 ]
>>803
>といのがCのプログラムの中で出てきたのですが、これはどういう意味で、
>これをFORTRANで表現するにはどうしたらいいのでしょうか?
それを調べるのがあんたの仕事だ。
調べずとも明らかなことだけなら猫にでもやらせればすむことだからな。

807 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 01:44:40 ]
すみません超初心者なんですが質問いいでしょうか

1、ネットで見つけたあるサンプルをVisual C++ 2005 Express Editionというソフトで開くと
「古いバージョンのソフトで作ってあるから新しいソフトに書き直す」
というような内容のメッセージがでたのでOK、開けました

2、ビルドして実行しようとすると
”ビルドエラーが発生しました。続行して、最後に成功したビルドを実行しますか?”
というメッセージが出たのでOK

3、”プログラム’・・・.exe’を開始できません。指定したファイルが見つかりません。’
というメッセージが出てきて実行できません。

これってVisualC++2005だとこのソースはビルドできなくて結局使えないってことですか?
ゲームを作ろうとしたのにいきなり詰まってて困ってます。

808 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 01:47:35 ]
>>807
2.の時点で間違っている。
ビルドエラーが発生してるのに実行しようとしているため。
ちゃんとビルドできるようにして来い。
わかんなかったらソースとエラー書いてくれ。
もしくは、そのサンプルがあるURLを書いてくれ。

809 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 02:02:47 ]
CUIでのゲームプログラムを作ろうと思ってるんですが、
保存したデータ内容の編集はCの標準ライブラリのみで出来るのでしょうか。
追記は出来ても一部分のみ書き換えや削除等の方法が分からなくて。

810 名前:809 mailto:sage [2007/11/22(木) 02:04:00 ]
説明不足でした。
ファイル処理の話です。

811 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 02:06:36 ]
C以外でやった方が楽だし早いんじゃね?

812 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 02:08:50 ]
>>809
ファイルの途中への挿入や削除は標準関数ではできない。
サイズが変わらないなら、方法はある。

813 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 02:09:58 ]
>>811
仰るとおりですが、まだ授業でCの勉強しかしてなくて。
javaも独学で勉強してるもののいまいちピンと来ないんですよ…。

814 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 02:12:26 ]
>>812
書き換えや削除するとサイズが変わってしまうのでは?

もし宜しければ参考のためにご教示願えますか。



815 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 02:12:50 ]
テキスト操作したいならPerlとかPHPでいいんでない?
CとかJavaよりよっぽど楽に扱えるし、新しく勉強するに
してももそれほど時間かからないと思うよ

816 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 02:18:22 ]
ファイルがそこまで大きくないなら起動時に一気にすべて読み込み、終了時に新規に出力しなおすとかじゃだめ?

817 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 02:18:59 ]
// >>814
// for Example.
#include <stdio.h>
int main()
{
FILE * fp = fopen("foo", "w");
fprintf(fp, "a\nb\nc\n");
fclose(fp);

fp = fopen("foo", "r+");
fscanf(fp, "%*s");
fprintf(fp, "B\n");
fclose(fp);
return 0;
}

818 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 02:29:42 ]
>>815
暇潰しにする程度なので、新たに勉強する気力がなくて…。
基本的に学校のPCでしてるので環境がないのもあるんですが。

>>816
その方法が一番確実そうですね。
内容はユーザ情報とスコアランキングくらいなので。

>>817
無知で申し訳ないんですが、%*sってどういう意味でしょうか。
*はワイルドカードって事ですか?
あと試しにコンパイル実行してみましたが特に変化が分からなかったです…。

819 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 05:37:26 ]
>>803
> wgtinit(w,s1,inival,flag) /*initialize random weight matrix*/

wgtinit関数に引数w, s1, inival, flagを渡して呼び出す、という意味。
セミコロンがあるはずだが、写し忘れか?
こういうのはキーボードでタイプし直したりせず、コピペしような。

> drawrest(xps+50,50,200,200,yellow)
> line(xp,250,xp,yp,white,0,0)

この2つも同様に、drawrestやlineという名前の関数を呼び出している。

820 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 05:38:12 ]
>>807
ダイアログに表示されたメッセージの内容を理解せずにYesやOkを押すような人は、
プログラムを書くのに向いてない。やめたほうがいい。

821 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 05:40:51 ]
>>818
気力がなかったら、暇潰しで頭を使うようなことをせず、酒でも飲んで寝てたらどうよ。

> 無知で申し訳ないんですが、%*sってどういう意味でしょうか。

読み飛ばす・・・だったような。
こういうのは覚えておくものではなく、都度scanfのリファレンスで確認刷るものだよ。

822 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 07:14:43 ]
>>818
知らないことは調べるだけの話。
それをする気がないのは「無知」ではなく「無気力」。
刻苦を厭う怠惰は人を虎に変えてしまうのだよ。

823 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 07:51:59 ]
怠惰には、
無気力な怠惰 = メンドクサイから、何もやらない
と、
前向きな怠惰 = メンドクサイことをしなくても良いように努力・工夫する
がある。


824 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 19:50:07 ]
本当に怠惰な人間ならこんな便所の落書きに長文書いていつ来るとも知れぬ無責任な名無しの回答を待つ前に
さっさとグーグル先生でも聞いて済ますと思う



825 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 21:19:04 ]
*は代入抑止文字ですか。
変数に格納されないって事ですね。

ご迷惑おかけしました。

826 名前:807 mailto:sage [2007/11/22(木) 21:43:11 ]
すみません。実行できました
VBではよくプログラムをしてるんですがCの勝手がわからなくって。
まだよく分からないのですが、
SDKとかDXライブラリとかの設定をしてなかったから見たいです
出力に
DxLib.exe': 'なんとかかんとか' を読み込みました。必要な DBG ファイルが見つからないか、開けません。
等など沢山でているのは大丈夫でしょうか?

827 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 21:51:04 ]
>>826
「何が」大丈夫なのか否かを知りたいの?

828 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 22:38:53 ]
>>827
すみません
プログラムが変な動作をしたりしないのか、とか
バグじゃないのか、とか

プログラムに問題があるというメッセージなのか、それとも
これらのメッセージが出ているのは普通で問題はないのか
そういう意味です
なんだかVBと全然違うんですね

829 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 22:44:39 ]
>>828
> プログラムが変な動作をしたりしないのか

基本的には、しない

> バグじゃないのか

基本的には、バグではない

> プログラムに問題があるというメッセージなのか

基本的には、違う

> これらのメッセージが出ているのは普通で問題はないのか

基本的には、普通で問題ない

デバッグのための情報がないので、シンボルデバッグできないぞ、というメッセージ。

830 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 22:45:37 ]
自分が作ったクラスを入れるlistをsortするため、operator<を定義してるんですが詰まっています。

class Data{
  int x;
  int y;
public:
  Data(int a = 0, int b = 0){ x = a, y = b };
  int getx(){ return x; };
  bool operator<(const Data&);
};

bool Data::operator<(const Data& obj){
  return x < obj.getx();
}

const Dataのobjからgetx()を呼び出しているせいか(?)、以下のコンパイルエラーが出ます。
passing `const Data' as `this' argument of `int Data::getx()' discards qualifiers
getx()はxを変更しないのに、objをconstにしたらダメなのでしょうか?

831 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 22:55:52 ]
>>830
int getx() const { return x;}

832 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 23:04:43 ]
>>831
ありがとうございます。
const int getx()は試したんですけどねぇ。
この辺ややこしくなってるので勉強し直します。

833 名前:デフォルトの名無しさん mailto:sage [2007/11/22(木) 23:58:10 ]
>>829
本当に親切に答えてくださってどうもありがとうございます。
凄く助かったし安心しました。
これからもっと精進して頑張ってゲームを作ります。

834 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 05:31:13 ]
8bit以外のchar型の処理環境ってどんなのがあるの?



835 名前:デフォルトの名無しさん [2007/11/23(金) 15:12:38 ]
#include <iostream>
using namespace std;

class Base
{
public:
static int m_iVal;
void SetValue(int val) { m_iVal = val; }
void Show() { cout << "m_iVal: " << m_iVal << endl; }
};
class Hoge1 : public Base{ };
class Hoge2 : public Base{ };

int Base::m_iVal = 0;

void main()
{
Hoge1 hoge1;
Hoge2 hoge2;

hoge1.SetValue( 100 );
hoge2.Show();
}

このプログラムで hoge2.m_iVal = 100 となるんですが よかったでしょうかね?
確認のためですけど


836 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 15:48:08 ]
>>834
ttp://ja.wikipedia.org/wiki/ACOS-6

837 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 15:48:32 ]
良い。

838 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 15:55:53 ]
charは少なくとも8ビットじゃなかったか?

あーsizeofが1になることが定義されてるだけだっけか

839 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 15:58:11 ]
RISCだと、longからcharまで全部32bitってのがあるんじゃね?

840 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 16:15:40 ]
確かに規格上 char ≦ short ≦ int ≦ long だから全部同じサイズでも許されるな

841 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 17:00:18 ]
>>838
char は1バイト、1バイトが何ビットかって? そんなこと、好きに決めて良いよ

842 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 17:09:35 ]
>>838
少なくとも8ビットだよ。

843 名前:デフォルトの名無しさん [2007/11/23(金) 17:31:57 ]
初心者ですが、質問です。

#include <stdio.h>

int main (void)
{
int i = 1000, j = 40, k = 3000;
printf ("iが%dで、\njが%dで、\nkが%dです。\n",i,j,k);
return 0;
}

こう書いた場合はエラーにならないのに、こうする↓と、
printf ("iが%dで、\n
jが%dで、\n
kが%dです。\n",i,j,k);

構文エラー : ')' が、識別子 'jが' の前に必要です。
と言われて、コンパイルでエラーになってしまいます。
C言語では、;を文末をみなすため、どこに改行を入れてもいいと聞いていたのですが、
入れる位置が決まっているのでしょうか?環境は Visual C++ 2005 Express Edition です。

844 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 17:38:55 ]
printf ("iが%dで、\n"
"jが%dで、\n"
"kが%dです。\n",i,j,k);



845 名前:デフォルトの名無しさん [2007/11/23(金) 17:45:07 ]
>>844
実行されました!
printfの""の中だと改行するには一度"で終わらせてあげないといけないんですね。
ありがとうございました。

846 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 18:08:01 ]
>>845
printfに限らず、文字列は1行ごとに""で終ってないといけない。

847 名前:デフォルトの名無しさん [2007/11/23(金) 18:14:05 ]
プログラムの初心者ですがSQLを書いていますが、C言語と似てると
思いますので、わかる範囲で答えて頂けると助かります

以下のようなプログラムを書いたのですが、パソコンに複数のメールが
送られてきます。 メール送ったら終了のように直したいのですが、
どのようにしたら良いでしょうか


if ((fasterLWMAnow > slowerLWMAnow) && (fasterLWMAprevious < slowerLWMAprevious) && (fasterLWMAafter > slowerLWMAafter)) {
CrossUp[i] = Low[i] - Range*0.5;
Alert(Symbol(), " hit ");
SendMail("Mail Alert", Symbol()+" hitdesu ");


848 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 18:22:20 ]
>>847
――これは、新しい釣りですね…。

849 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 18:26:58 ]
>>847
100どんだけぇを軽く超えてるよ

850 名前:デフォルトの名無しさん [2007/11/23(金) 18:32:18 ]
すいません。まじめに質問したつもりですが、何がいけなかったでしょうか?

851 名前:デフォルトの名無しさん [2007/11/23(金) 19:05:38 ]
>>846
分かりやすく教えていただき、ありがとうございました!

852 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 19:18:01 ]
>>847
そうなっていたんですか!
疑問が解決してすっきりしました、ありがとうございます!!

853 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 20:01:54 ]
C++ってCと比べてどれだけ遅いのですか?

854 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 20:05:15 ]
午後のこーだの作者曰く話しにならんぐらいとのこと



855 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 20:11:12 ]
そりゃ
午後は
アセンブラァばりばり

856 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 20:40:08 ]
ただし、一般的には機能を使おうとすればそれに応じてオーバーヘッドがかかるようになる。
Cと全く同じコードを書けば、Cと全く同じ速度にはなる。

まずはアセンブリ出力を見比べてみたり、実測することから始めようか。

857 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 22:02:16 ]
>>853
昔は、コンパイラが生成するコードがC++の場合は遅く、
同じことをするにしてもCで書いたほうが速かったのだろう。

C++で書いたコードを、手作業でCに変換しても、
速度的には大して変化しないと思うよ。

すべてのクラスにvtableを持たせるようなことをしなければ、ね。

858 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 22:09:20 ]
Cの範囲で書いていたら、C++としてコンパイルしても、生成されるコードは同じだよ。昔から。

859 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 22:28:17 ]
一歩C++の領域に踏み入ると劇的に変わるけどね
デストラクタ一つで激変

860 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 22:30:12 ]
C++ は参照とかインライン関数とかテンプレートとか駆使したら、
C と同じ速度でより安全なプログラムが書けると思う。

861 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 22:32:01 ]
std::sortは比較操作がインライン展開できるから、
qsortよりも速くなりやすいなんてのは有名だよね。

862 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 22:35:56 ]
そうそう。
まあ、qsort をマクロ化すれば C でも速いの書けるんだろうけど。

863 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 22:36:29 ]
C++は例外に備えないといけないので
Cと同じコードを吐ける場面は少ない

864 名前:デフォルトの名無しさん [2007/11/23(金) 22:37:14 ]
テンプレートとか、STLとかどのくらい手間掛けているか不明なやつ使うと鈍くなる
charやintを直接あやつる範囲ではアセンブラに匹敵する



865 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 22:40:22 ]
アセンブリ言語っつっても、
速いコード書くノウハウ無かったら
コンパイラの最適化の方が速かったりするもんな。

866 名前:デフォルトの名無しさん [2007/11/23(金) 22:59:52 ]
とりあえず初心者が動かせる3Dライブラリを開発しますか

867 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 23:08:38 ]
>>859
それは、
不必要にデストラクタをvirtualにする
という愚をやらかしているだけだろ。

>>863
それはどこの何というコンパイラ?

例外をthrowする、throwされたものをcatchする、それにはコストは要するが、
例外中立なコードにはオーバーヘッドかからないと思うが。

868 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 23:10:33 ]
catchしなくても例外が通り抜けるときにデストラクタを呼ばないといけない
さっきg++で試してみた
virtualかどうかは関係ない

869 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 23:10:35 ]
デストラクタから virtual を外すのは
どうしても必要な時だけにするのが無難だべ。

870 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 23:17:58 ]
逆だろ? 仮想関数を使う必要がある時だけ付けるよな。

871 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 23:19:40 ]
馬鹿が飛びつくつまらない話が出てきちゃった

872 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 23:22:00 ]
あとから仮想関数が必要になった時に付け忘れても知らんべ。

873 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 23:24:00 ]
JavaやC#みたいに継承禁止ができたら、安心してvirtualをはずせるけど。

874 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 23:24:09 ]
使われ方によって、virtualをつける必要があったりなかったりするC++は糞言語。



875 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 23:29:11 ]
final/sealed 欲しいよなあ。
Final ですってコメントつけて非仮想デストラクタにすることはあるけど、
コメントだけじゃ心もとないよな。

876 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 23:31:57 ]
クラス設計時点で継承の有無はわかるだろ。
あとから必要になったら、その時点で必要な修正を行えばいいと思うが。

877 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 23:33:10 ]
C++しか知らないと、そういう物の考え方するんだ

878 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 23:33:54 ]
うん

879 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 23:35:06 ]
そういう意味で言うと、後から必要になったときでも修正の必要がないように、
デストラクタは必ずvirtualで、っていうのも、あながち間違った選択ではないと思える。

880 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 23:35:29 ]
一体誰がどう使うクラスの設計してるんだ?

881 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 23:36:14 ]
とりあえず virtual を付けとけば、
どういう変更が必要になろうが何の心配も要らない。
virtual を付けてないと、後の変更でバグを発生させる可能性がある。
その変更を行うのが自分とは限らないわけで、
どっかのバカが変な事をするかもしれない。
そう考えると、デストラクタを非仮想にするのは、
よほど非仮想にするメリットがある場合じゃないと怖くてできない。

882 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 23:37:33 ]
C++って、そういう本質的でないところにも気を使わせるのが、糞言語たる所以だね。

883 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 23:38:31 ]
速度やデータサイズは本質的な問題だよ。

884 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 23:39:30 ]
じゃ、Javaなんてとてもじゃないが使えないってわけだ。



885 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 23:39:57 ]
そこが本質的な問題になることがあるから。

886 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 23:41:02 ]
速度やデータサイズを気にする必要があれば
Java なんてとてもじゃないが使えないってわけだよ。
気にする必要がないなら使えばいい。

887 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 23:42:07 ]
道具は選んで使うべきだ

888 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 23:42:50 ]
Cで書けばいいのに(^^

889 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 00:13:35 ]
>>868
> catchしなくても例外が通り抜けるときにデストラクタを呼ばないといけない

当たり前だろ。

正常にreturnする時にもデストラクタは呼ばれるのだから、
それは、例外のオーバーヘッドとは言わないだろう。

>>869
それなら、virtual なんて書かずとも全てがvirtual で、
nonvirtual などと書いたものだけがvirtual でなくなる、
そういう言語仕様になるだろうに。

890 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 00:15:24 ]
>>889
色々とお話しにならない。

891 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 00:19:11 ]
>>872
それをもってして、C++は実行時オーバーヘッドが大きな言語だと言われてもなぁ。

>>873
継承できないようにするハックはあるけど、まぁ、オススメしないわな。
もっと別の方法で、管理すべきだろうな。

>>874
使い方によって、だろ。

キャストしたポインタでdeleteするような使い方をする側が、
デストラクタがvirtualであることを確認し、そうでなければ、
継承するのではなくメンバに持つように実装すべきなんだ。

892 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 00:21:26 ]
>>890
具体的に

893 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 00:21:33 ]
>>891
> それをもってして、C++は実行時オーバーヘッドが大きな言語だと言われてもなぁ。
別にそんなこと言っとらんわ。

894 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 00:22:58 ]
>>891
> 継承できないようにするハックはあるけど、まぁ、オススメしないわな。
何か特殊なクラスを継承して、結局仮想関数が必要だったような気がする。



895 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 00:25:12 ]
C++が糞言語であることには、誰も異論はないだろう。

使っている道具を糞だと言っているだけで、
それを使う人間が糞だと言っているわけでもないのに。

C++が糞言語だと言われて顔を真っ赤にするのは、
Stroustrupだけで、いいんじゃないか。

896 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 00:26:07 ]
>>893
話の流れを無視した独り言だったのか。

897 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 00:26:23 ]
>>889
下記の f と h のコンパイル結果を比べてみるといい

struct S { ~S(); };

int g();

int f()
{
S s;
g();
return 0;
}

int h()
{
S s;
return 0;
}

898 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 00:28:39 ]
そういう言語仕様になるだろうにとか言われても、
今実際にそうなってないんだから、そういう事言っても無駄だよな・・・。

899 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 00:32:50 ]
>>894
ttp://article.gmane.org/gmane.comp.lib.boost.devel/101260
これかな。

それなりのコンパイラなら、
vtableは作られるが、使われないので、リンカによって削除されるだろう。

900 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 00:35:05 ]
>>898
そういう言語仕様になっていない
ということは、
というのが言語仕様を決めた人達は、
基本的にvirtual で例外的にvirtualではなくする
というポリシーではなかった、ということだね。

互換性のために、そういうポリシーだという可能性もあるが。

901 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 00:36:20 ]
>>899
あ、別に仮想関数は要らんかったか。

902 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 00:37:39 ]
>>900
デストラクタはデフォで virtual な方がいいけど、
他の関数は virtual がデフォである場合も nonvirtual がデフォである場合も
一長一短なので何とも言えない。

903 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 00:46:09 ]
>900

Stroustrupに聞いてみ、と言おうと思ったら、本人のページに書いてあったわ。
www.research.att.com/~bs/bs_faq2.html#virtual

「多くのクラスは、基底クラスとして使われるように設計されないから」だって。
基底クラスは、「基底クラス」と意識して最初から設計しろ、ってことか。


904 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 00:47:20 ]
仮想関数が1つでもあれば自動的にデストラクタもデフォで仮想関数になってくれればいいのにね。



905 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 00:55:29 ]
>>904
virtualなメンバ関数があるからといって、virtualなデストラクタが必要とは限らないしなぁ。
結局、どのようにdeleteするのかは、そのクラスを使う人が決めることだから。

使う人が決めることなのに、作る人が決めないといけないのは変だがね・・・。

906 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 01:18:27 ]
>>897
何が言いたいのか理解した。

~S()の呼び出しコードがhでは1個なのに対して、fでは2個になるってことか。
たしかにコードサイズは肥大するが、正常系のルートの実行速度には影響しないだろう。

ちなみに、
struct S { ~S(); };
というのは、
struct S { ~S() throw() ; };
とすべきだろうな。
デストラクタで例外をthrowしちゃいかんよ。

実行速度のために例外を(部分的に)使わないという選択もC++では可能だぞ。
int g() ;

int g() throw() ;
とすれば、f()やh()内では例外のためのコードが生成されない。

907 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 01:21:06 ]
結局、C++は遅い と言っている人は、
Cと同じことをするコードをC++で書いて遅いと言っているのではなく、
Cよりも複雑なことをするコードをC++で書いて遅いと言っているわけだ。


908 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 01:30:37 ]
>>907
少なくとも自分はそう言ってる
で、Cよりも複雑なことをしないのは難しい
まあ、Cとしてコンパイルできるコードを書けばいいだけだけど

909 名前:デフォルトの名無しさん [2007/11/24(土) 01:42:10 ]
stlとか複雑な機能を簡単にするやつを使うとCで書いた方が速い
たとえばstringなどは確保したときにサイズは確保されない もし文字列の最大長が分かっていればchar[]で取っておいた方が速い

910 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 01:43:35 ]
> int g() throw() ;
> とすれば、f()やh()内では例外のためのコードが生成されない。

そうするとg()側でコストが掛かる
g 内のコードが例外を投げないことが明確なときはコストはないけど
例外指定を書けないCのライブラリを呼んでたりするとお手上げ

例外関連のコストを避けるのは難しいね、ということでした

911 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 01:45:25 ]
>>909
そもそもクラスである意義を忘れないで下さい。

912 名前:デフォルトの名無しさん [2007/11/24(土) 01:46:51 ]
実際はアセンブラもCもC++もたいして変わらないが、まれにCよりアセンブラのほうが速く、まれにC++よりCのほうが速い
まれが重なると細かい手入れが出来るアセンブラが良くなる

913 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 01:52:57 ]
>>908
そうか・・・

>>909
STLの使い方が悪いと、そうなるね。

そのstringの例だと、
固定長の文字列のクラスを作ったらどうよ。

>>910
え? Cのライブラリは自動的に throw() として扱われるっしょ。
CのライブラリがC++の例外をthrowすることなんて、できないんだから。

914 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 02:02:27 ]
> え? Cのライブラリは自動的に throw() として扱われるっしょ。
> CのライブラリがC++の例外をthrowすることなんて、できないんだから。

いつもコンパイラにわかるわけじゃない



915 名前:デフォルトの名無しさん [2007/11/24(土) 02:05:26 ]
別にC++は遅くないと思うよ。標準ライブラリやSTLも使わずに、
カリカリにチューニングして書けば。でも、標準ライブラリも
STLも使わないC++使う意味なぞない。

標準ライブラリはメモリコピーとメモリの動的確保・開放
を前提にしているから遅い。だがしかし、これはC++を使う大きな
利点であるので捨てられない。

速度と効率を求めるならCを使えばいい。

916 名前:デフォルトの名無しさん [2007/11/24(土) 02:19:11 ]
これをインストールしたいのですがメイクが出来ません BCC5.5.1です
www.vector.co.jp/soft/dl/win95/prog/se059033.html
どうすればいいんでしょうか? エラー内容です

..\source\lib\remul.cpp:
エラー E2017 ..\source\lib\remul.cpp 38: メンバー名 'ctype_base::digit' が曖昧(関数 Mint::isRemUL(const unsigned long,int) const )
*** 1 errors in Compile ***
** error 1 ** deleting ..\BC5LIB\remul.obj

..\source\driver\berntbl1.cpp:
エラー E2367 D:\Programs\bcc\INCLUDE\constrea.h 41: 非 RTTI 基本クラス streambuf からは RTTI クラスを継承できない
エラー E2367 D:\Programs\bcc\INCLUDE\constrea.h 207: 非 RTTI 基本クラス ostream からは RTTI クラスを継承できない
エラー E2318 D:\Programs\bcc\INCLUDE\constrea.h 255: 'ostream' は多様性を持つクラスではない(関数 constream::isCon(ostream &) )
*** 3 errors in Compile ***



917 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 02:33:31 ]
>>914
具体例は?

>>915
STLが遅いと言ってる人は、
実装が悪いSTLを使っているか、
コピーにコストがかかるオブジェクトを直にコンテナに格納するとかの使い方が悪いんじゃないか。

918 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 02:38:19 ]
ヘッダファイルに

int g();

と書かれててコンパイラにわかる?

919 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 02:53:18 ]
>>918
C++から、C++を考慮していないCのヘッダファイルを使う場合、

extern "C" {
#include "hoge.h"
}
とするのが普通だろ。

"C"なら、C++の例外をthrowしないということがわかる。

920 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 02:56:30 ]
>>918
で、コンパイラ付属のC標準ライブラリをC++から使った場合に、
例外をthrowするものとして扱われてしまう、そういう具体例は?

具体例を挙げてもらったところで、
そんなダサいコンパイラを使うのはやめろ
なのだが・・・。

921 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 03:04:18 ]
じゃあ、C++のヘッダファイルでCのヘッダをナイーブにインクルードしちゃってた場合は?

いいだしたらきりがないけど

922 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 03:07:44 ]
ああそうか
インクルードパスの調整とかで回避できるか

923 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 03:08:31 ]
>>920
はは、そんなことは言ってないよ

924 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 03:14:34 ]
>>921
そのC++のヘッダファイルの責任だよ、Cのヘッダファイルをextern "C"の中でincludeするのは。

間違った使い方をしたときの話をしても、しかたあるまい?



925 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 03:17:27 ]
いや、そういうことも含めてコストの話をしていたつもり
ほとんどのプログラムは完璧じゃないから

論点がずれてたね

926 名前:デフォルトの名無しさん [2007/11/24(土) 03:27:21 ]
>>917
いやいや。例えば、あるバッファがプログラムの中で必要だったとしよう。

myvec.assign(nlen, '\0');
func(&myvec[0], myvec.size());

というように、C++だとかけるし、スコープ外にでれば、myvecで確保した
メモリが自動解放されるので、メモリリークの心配も少ない。Cだときちんと開放
しないとメモリリークを起こす。んで、これはC++の大きな利点。

クラスを自分で実装しても、ちゃんとメモリリークしにくい実装という
のはできるけど、標準ライブラリで多くの機能が実装されているという
のがC++の利点だといっているわけで。

ただし、こういう利点を享受するためには、メモリの動的確保・開放
を受け入れなければならないって話ナ。

927 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 04:08:27 ]
>>926
何を言いたいのか、わからないなぁ。

もしかして組込屋?

以前に電話の交換機のソースを見たが、ありゃぁ酷かった。
変数がすべてグローバルでstaticな上に、変数名がメモリの番地で、
しかも、同じ変数を時と場合によって違う用途に使いまわしていたり。

メモリの容量が足りないとか、
どれだけ長く動かし続けても決められた状態以外にはならないとか、
そういう特殊な事情があるというのは理解できるが、ありゃぁ別世界だよ。

928 名前:デフォルトの名無しさん [2007/11/24(土) 04:14:23 ]
>>927
別世界だが、そういう世界でなければCをワザワザ使わないって。
俺もC++スキダケドナ。使えないのよ。

929 名前:デフォルトの名無しさん [2007/11/24(土) 04:15:30 ]
>>927
>変数がすべてグローバルでstaticな上に、変数名がメモリの番地で、
>しかも、同じ変数を時と場合によって違う用途に使いまわしていたり。

ちなみにこの発言は、もの知らなすぎるなw

930 名前:デフォルトの名無しさん [2007/11/24(土) 04:21:57 ]
ちなみに、メモリ制約の大きいところでは、そもそもメモリの
動的確保・開放は使えないからな。最終的に作り上げたアプリが
最大でいくつのメモリを必要とするかを提示できないといけないから。

931 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 04:24:47 ]
>>929
ああ、その別世界の住人ではないからな。

たまたま機会があって、ちらっとソースを見て話を聞いて、
その彼らのコーディングルールにぶったまげただけだもの。


932 名前:デフォルトの名無しさん [2007/11/24(土) 04:27:39 ]
まぁ927は、コンピュータの基礎から勉強しなおすのを薦める。

933 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 04:33:23 ]
>>932
話が繋がりませんが? どういうことよ。

マイコン = マイクロ・コントローラな人達の世界の常識なんて、いらないよ。

934 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 04:34:05 ]
日本の時代錯誤的な作り方をしている携帯電話屋か。
過労で頭がどうにかしてしまったかい?



935 名前:デフォルトの名無しさん [2007/11/24(土) 04:42:07 ]
>>933,>>934

時代錯誤だと思い込んでるのは、幼稚な日本の技術者だけだよ。
自分の頭で普通に考えればわかることだ。

課題「なぜ、低級言語がなくなることは考えにくいか、1000文字以内で論じなさい」

936 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 04:44:32 ]
>>935
三流大学の講師にでもなったら?

937 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 04:46:49 ]
プッ

938 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 04:58:26 ]
自分で理路整然と説明できないので、
学生たちにレポート書かせて、その中から優秀なのを見つけて自分のものにする
そんな人間だな。

携帯電話のアプリケーション用プロセッサの性能とメモリ容量は、
すでにSun4あたりの昔のUNIXワークステーション並で、
リブートせずに連続動作する時間は同じくらいなのに、ソフトの作りがまるで違う。
その理由は様々考えられるだろうけど、1つ言えるのは、
設計者が過去の別次元のやり方をそのまま使っているか否かだと思うよ。

939 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 05:00:59 ]
お前ら、スレタイも読めない馬鹿には、発言権なし!

940 名前:デフォルトの名無しさん [2007/11/24(土) 05:05:39 ]
>>938
君の発想では、もっとも低レベルのCPU、メモリを使用している
ものは携帯電話までだというようだけど、それって今後も
ホントウにそうなのか?

941 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 05:07:10 ]
こういうタイプの人間は決まって自分から答えを言おうとしないんだよな。

942 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 05:38:45 ]
>>940
スレタイも読めない馬鹿ですか?

943 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 05:40:53 ]
>>941
言おうとしないのは、言えないからだよ。

944 名前:デフォルトの名無しさん [2007/11/24(土) 05:47:33 ]
>>941,943
思考停止は、成長を停めるぞ。



945 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 06:28:37 ]
>>944
煽るだけかよ。
スレタイを見て適切な行動を取れ。
でなければ、お前が思考停止の老害だ。

946 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 07:26:39 ]
>>916
なんか指定のコンパイラが古いね。
エラーメッセージも危険な香りがする。
あきらめて同等の他のものを探した方が早い気がするんだけど、だめかなぁ?

947 名前:デフォルトの名無しさん [2007/11/24(土) 09:01:17 ]
ループの中で行う処理の中に標準出力を入れたとき、
コンパイルして実行したらループの中の標準出力がでてこないときがあるのですが
どうすれば解決できるのですか?

948 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 09:07:18 ]
>>947
ループと標準出力を結びつけないで考えるようにすればいいんじゃないかな?

949 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 09:18:33 ]
>>947
現象を再現できる最小のコードを書いてうpしてみそ。

950 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 09:20:25 ]
組込み屋だが・・
>>927が例に出してるような環境は組込みでも珍しいと思う。
10年以上やってるが、そんなコードは見たこともない。
スタックは昔から使えるから、auto変数ぐらいは使えるはずだが。
ただ、
>変数がすべてグローバルでstaticな上に、変数名がメモリの番地で、
>しかも、同じ変数を時と場合によって違う用途に使いまわしていたり。
↑これはレジスタのような気がしなくも無い。

今ではmalloc/freeくらいは実装する場合が多いと思うよ。
動的確保でも、大体のメモリ見積はできるしね。
けどSTLとなると大概はオーバースペックだと思うな。

>>938
>設計者が過去の別次元のやり方をそのまま使っているか否かだと思うよ。
↑これは別に否定しないが、仮想記憶が無いことがほとんど、というのがでかいと思うよ。
ちょっと前までやってた仕事では、メモリ1GBあっても「足りない」と言ってたし。


951 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 09:22:02 ]
>>947

何らかの理由でループの中に入らないことがある、と言う事だろう。
そのあたりが多分バグ。


952 名前:デフォルトの名無しさん [2007/11/24(土) 09:40:44 ]
>>949
再現というか、一通りforループの中の計算の処理をしおわって、ループを抜けた後に
ループの中に書いた標準出力がワーッと出てくるような感じなんですよね

シェルスクリプトみたいに逐一でるようにはならないのかなあと考えているのですが
どうすればよいのかわかりませんです

953 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 09:43:05 ]
>>952
ループの中にfflush(stdout);とか入れてみるとか。

954 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 09:44:28 ]
>>905
まあ new しないで使うだけの事もあるし、
new したとしても常に元の型で delete する場合もあるだろうしな。
ただ、安全を考えるならとりあえず virtual にしといて、
それが速度に影響していた場合だけ変えればいいと思うよ。

仮想関数が1つでもあればどうせ仮想関数テーブルは存在するし、
delete 使わずにデストラクタが直接呼ばれる場合には
どのクラスのデストラクタを呼ぶか確定してるから普通のメンバ関数と同じ形で呼ばれるから
特別なコストは発生しないし。(インライン化も可能。)
つまり、仮想デストラクタが影響するのは delete 時のコスト変化だけだから、
既に仮想関数テーブルがあるような状況では、
常に元の型で delete する場合にしか影響は無い。
でも、delete のコストで普通はまぎれる。



955 名前:デフォルトの名無しさん [2007/11/24(土) 09:48:06 ]
endlだとブッファが効く \nだと一行ずつ出力する

956 名前:デフォルトの名無しさん [2007/11/24(土) 09:50:25 ]
質問お願いいたします。

動かないゲームの補助ソフトのソースをいただき、
「○○の部分を○○に書き換えてコンパイルしてexeにすれば動くようになるよ」
と教えて頂き、書き換えまでは何とか出来たのですが、コンパイルが出来ません
googleでしらべてみて、該当ソフトらしき物を幾つかベクターで落として試してみたのですが、exeファイルに出来ない状態です。
ご指導いただけると嬉しいです

ちなみに書き換えたファイルの拡張子は cpp と h でした

よろしくくお願いします

957 名前:デフォルトの名無しさん [2007/11/24(土) 09:56:44 ]
ファイルをアップしてくれないと分からない
してくれればexeに出来るかもしれない

958 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 10:01:30 ]
>>947
可能性1 標準出力がバッファリングされている
可能性2 ループがCPUを使いっぱなしのため、標準出力を画面等に表示するスレッドにCPUが廻らない

具体的な話を出さない質問だと、これくらいか。

959 名前:956 mailto:sage [2007/11/24(土) 10:02:20 ]
>>957

www.vipper.org/vip674870.rar.html

こちらになりますです
よろしくおねがいいたします

960 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 10:03:23 ]
>>956
VC++ 2005 Express Edition でも使え

>>957
そのゲームがやりたいだけだろw

961 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 10:04:36 ]
>>956
多分、コンパイルができるようにならないと無理だと思う。
cpp は C++ のソースファイルだと思うから、 C++ の勉強を一からしてみよう。

962 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 10:10:05 ]
>>959
おいおい、そのソースはこうやって公開していいものなのか?

963 名前:956 mailto:sage [2007/11/24(土) 10:14:33 ]
>>960
VC++ 2005 Express Edition が該当コンパイルソフト?なのでしょうか?

>>961
それがベストなのはもちろん理解しているのですが、今回とりあえずはこれさえexeに出来れば良いMPのでして・・・

>>962
作者の方が勝手にいじってくれて結構と公言しておりますので問題有りません
作者による更新が止まってしまったので、ソースを頂いて書き直したのですが、コンパイル出来ない状態です 笑

964 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 10:18:33 ]
>>954
パレートの法則があるわけで、速度が求められる部分は限られていて、
大半の部分は速く動く必要がないので、C++が多少遅くても問題ないよね。
速度が求められる部分だけ、速度に気を遣って書けばいいし、
なんなら、そこだけCで書いてもいいしさ。

それに、C++が遅いといってもO(1)の話だから、どうでも良かったりする。



965 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 10:20:02 ]
ようわからんが、オンラインゲームチーティング用コード?

966 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 10:22:25 ]
まあ O(1) もループ内に入れば O(N) やら O(N^2) やらになるんだけどね。

967 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 10:22:53 ]
>>959
おい、そいつはUltimaOnlineのチートツールか?

プログラムを書くのではなく、使うのが目的の人は、板違い。

968 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 10:24:55 ]
升ツールにやれるアドバイスはないな。

969 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 10:25:43 ]
>>966
そういう場合、多重にループさせるアルゴリズムのほうに問題があって、そっちを改良すべきでしょう。

970 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 10:26:16 ]
>>963

このソースはVC++じゃないとコンパイルできない。
VC++はいくつかエディションがあるが、無償なのはExpress Editionだけ。
www.microsoft.com/japan/msdn/vstudio/express/visualc/

あと、このソースだとPlatform SDKが要る。
多分これ。
www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en


971 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 10:27:12 ]
>>970
仁義守れや。

972 名前:956 mailto:sage [2007/11/24(土) 10:30:34 ]
>>967
>>965
そうです
あれ、板違いですか
失礼致しました・・・

>>968
そう言わずに何とかお願い致します。

>>970
おっと
有り難うございます!
とても難しそうですが頑張ってみます!

973 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 10:52:45 ]
なんでNODEFAULTLIB設定してるんだろ
あと古いプロジェクトファイルをVC2005でコンパイルするとたまにGSオプション無効にしないとリンカエラーになるのもよくわかんね

974 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 11:02:46 ]
>>972
大麻の栽培方法を公衆の面前で人に聞いて回るような、そういう行為をしているっていう自覚ないんか?



975 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 11:07:09 ]
ないからやっているんだろ

976 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 11:08:15 ]
次スレ要る?ここへ合流でいいと思うんだが。
【初心者歓迎】C/C++室 Ver.44【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1194016813/l50


977 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 11:09:08 ]
>>974
違法じゃないと思うからちょっと大げさなんじゃないかな。
金払ってやるゲームでのずるの仕方を聞いてるわけだ。
それ以上でもないし、それ以下でもない。

978 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 11:11:15 ]
UOはチート自由なのか? それでよくゲーム運営が成立しているな。

979 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 11:37:16 ]
>>977
認識が甘い。

チートは、
不正アクセス防止法
電子計算機損壊等業務妨害罪
この2つに抵触する可能性がある。

980 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 11:41:15 ]
チートというよりbotのようだけど

981 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 11:46:35 ]
違法か否かというのは刑事の話。

刑事とは別に民事で訴えられる可能性もある。
もしも、他の大勢のプレーヤのゲームバランスを著しく損うようなチートをして、
それが原因でゲーム会社の売上が見込みよりも大幅に減った場合、
その損害の賠償を求められる可能性もある。
一人のプレーヤがチートしたところで高が知れているので現実的には可能性は低いがね。


982 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 11:49:17 ]
まぁ何にしても、
後ろめたいことをやるなら、自力でやれ、他人に手伝わせるな
ってことだ。


983 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 18:18:18 ]
>動かないゲームの補助ソフトのソースをいただき、
HWND window = FindWindow ("Ultima Online", NULL);
確かに補助ソフトになるのかな?
笑ろた、
DLLへの参照が未解決になってるっぽいけど、
もしかして新手の釣りかも
調子こいてexe実行したらキンタマが感染なんて怖いお


984 名前:デフォルトの名無しさん [2007/11/25(日) 13:18:23 ]
RubyからDirectXは扱えないと一度レスもらったのですが、
ということはRubyからCOMにアクセスできないということなのでしょうか?



985 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 13:42:24 ]
スレタイ嫁

986 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 13:59:35 ]
スレ違いでしたね
すいませんでした。
というより
そろそろレス数も少ないので
証拠隠滅で埋めますか?ウヒ

987 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 14:20:14 ]
埋める前に次スレたててこい

988 名前:デフォルトの名無しさん [2007/11/26(月) 12:33:18 ]
質問します
LPDWORD型をint型に変換する方法教えていただけませんか?

989 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 12:39:51 ]
(int)lpdw

990 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 14:23:21 ]
>>989
ありがとうございます。それって、こういうことですよね?
LPDWORD lpdw;
int i = (int) lpdw;
エラーになるようですが。
foo.c:4: error: aggregate value used where an integer was expected

991 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 16:44:33 ]
そもそも、LPDWORD型は何なのか勉強しなおした方がいいとおもうよ

992 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 16:54:12 ]
>>991
typedef struct {
int foo;
int bar;
} LPDWORD;
こうですか? わかりません。

993 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 17:15:05 ]
LPDWORDは、long pointer DWORDじゃね?

994 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 17:18:32 ]
>>993
どこの規格に書いてありますか?



995 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 17:33:20 ]
Microsoftの俺仕様

996 名前:やばす [2007/11/26(月) 17:36:52 ]
rubyで最大値を出すコマンド教えてください><

997 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 17:38:06 ]
何の最大値?

998 名前:やばす [2007/11/26(月) 17:39:19 ]
えーと
例えばクラスのテストの点数の最高点をだす
とかです

999 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 17:39:47 ]
埋まるからとりあえず質問したいやつはここ行け
【初心者歓迎】C/C++室 Ver.44【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1194016813/l50

>>996
スレ違い

1000 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 17:40:56 ]
umeeeeeeeeeeeeeeeeeeeeeeeeeee

1001 名前:1001 [Over 1000 Thread]
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<260KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef