C++相談室 part73

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part72
http://pc12.2ch.net/test/read.cgi/tech/1251773567/
2デフォルトの名無しさん:2009/10/05(月) 23:49:17
STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?

#include <stdafx.h>
後死ね。

言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
3デフォルトの名無しさん:2009/10/06(火) 03:28:03
■基本■
[C++ FAQ]
 http://www.parashift.com/c++-faq-lite/
 http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
  Cとその仕様を比較しながらの解説なので分かりやすい。
  ***** 質問の前に必ずこの二つに目を通してください *****
[C/C++ リファレンス]
 http://www.cppreference.com/ (英語)
 http://www.cppll.jp/cppreference/ (↑の日本語訳だけど最新は反映していない)
[禿 Stroustrup]
 http://public.research.att.com/~bs/
[C++ International Standard]
 http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=38110
[JTC1/SC22/WG21 - C++]
 http://www.open-std.org/jtc1/sc22/wg21/
  ここから規格の最新(2003より新しい)ドラフトがダウンロードできる。
[JIS X3014]
 http://www.jisc.go.jp/app/pager?%23jps.JPSH0090D:JPSO0020:/JPS/JPSO0090.jsp=&RKKNP_vJISJISNO=X3014
  ISO規格の日本語訳。JIS X 3014:2003はISO/IEC 14882:2003 (E)に対応。
4デフォルトの名無しさん:2009/10/06(火) 03:30:07
5デフォルトの名無しさん:2009/10/06(火) 03:31:56
6デフォルトの名無しさん:2009/10/06(火) 04:07:52
■Libraries■
[Boost]
 Boost http://www.boost.org/
 (日本語) http://www.kmonos.net/alang/boost/
 (日本語) http://shinh.skr.jp/boost/
[標準ライブラリ]
 SGI-STL http://www.sgi.com/tech/stl/
 STLport http://stlport.sourceforge.net/
 GNU libstdc++ http://gcc.gnu.org/libstdc++/
 Apache C++ Standard Library (STDCXX) http://stdcxx.apache.org/
 STLFilt http://www.bdsoft.com/tools/stlfilt.html
 (日本語) http://episteme.wankuma.com/stlprog/ (※1999年発行注意)
[Loki]
 http://sourceforge.net/projects/loki-lib/
 LokiPort-MSVC6sp5 http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport
7デフォルトの名無しさん:2009/10/06(火) 04:11:08
codepad
ttp://codepad.org/

長いソースを貼るときはここへ!
8デフォルトの名無しさん:2009/10/06(火) 04:16:48
テンプレ終了。

前スレは Books のリンクがなぜか (Templateまわり) だけになってたんで、
基本の書籍のやつ (>>4) も復活させといた。

Libraries (>>6) では、επιστημηさんの本のサイトが移転してたのを追尾。
あと、角さんの STL のページは死亡確認できたんでリンク削除しました。
http://d.hatena.ne.jp/sumi_wakhok/20090903/p4
9デフォルトの名無しさん:2009/10/06(火) 04:34:10
いちおつー
10デフォルトの名無しさん:2009/10/06(火) 17:37:31
delete ++1;
11デフォルトの名無しさん:2009/10/06(火) 18:00:07
Segmentation fault. [Core dumped]
12デフォルトの名無しさん:2009/10/06(火) 18:52:10
Java脳の人はどうして無意味にC++に対して攻撃的なのですか?
13デフォルトの名無しさん:2009/10/06(火) 18:57:22
>>12
悔しいからです
14デフォルトの名無しさん:2009/10/06(火) 19:07:28
C/C++と比べて遅い遅い遅いといわれるだけでその他の部分が正当に評価されてないように思ってるからだな。
15デフォルトの名無しさん:2009/10/06(火) 19:14:59
だって本当に遅いんだから仕方ない
そもそも早さで張り合おうとすること自体が間違い
16デフォルトの名無しさん:2009/10/06(火) 19:29:26
C#で楽しろよ
17デフォルトの名無しさん:2009/10/06(火) 19:40:01
>>12
C++に挫折した人がやってるからじゃないかな?
18デフォルトの名無しさん:2009/10/06(火) 19:41:19
19デフォルトの名無しさん:2009/10/06(火) 20:11:45
C++とJavaは見た目は似てるが、言語設計思想が全く異なる。というわけで、C++で
当たり前のことをやっていても、Javaをやっている人から見れば理解できないことも
多い。基本的にC++は効率重視。大体のことをコンパイルタイムで終わらせようとする。
Javaはポータビリティー重視。誰でもどこでも使いやすいように作られている。

Javaで理解できないのは、RAIIが徹底していなくて、デストラクタがない点。
これで余計に苦労しているし、例外安全にするのが難しい。さらに、
ポリモーフィズムを使わないのにクラスを継承させるのが普通な点。これらが
パフォーマンスに大きな悪影響を及ぼしている。(Javaが起動時に遅いのは
深い階層で継承された各クラスのコンストラクタがひたすら走ってるから)

最近では動的言語が台頭してきたり、他言語がJVMに対応してきたりで、Javaは
中途半端になってしまった感がある。
20デフォルトの名無しさん:2009/10/06(火) 20:39:54
知らないうちに時代に乗り遅れてた焦りなんじゃないかな
Pascalだけしか知らないかつてのマと同様に
21デフォルトの名無しさん:2009/10/06(火) 20:53:28
JavaはCPUが以前と同じペースで速くなる前提で作られたからな
予想外に早く頭打ちになったのが計算外だった
22デフォルトの名無しさん:2009/10/06(火) 21:53:54
元から遅いしメモリ以外のリソースは漏らしまくるし
それを何とかしようとJNI使いすぎで可搬性落ちて仕様も肥大して
最近のJavaは何が売りなのかよくわからん
23デフォルトの名無しさん:2009/10/06(火) 22:14:59
そこでC#ですよb
24デフォルトの名無しさん:2009/10/06(火) 22:17:31
monoって追随できてんの?
25デフォルトの名無しさん:2009/10/07(水) 00:34:06
>>21
むしろ、CPUが十分早くなったらLLのほうが良かった、というオチじゃないかと。
26デフォルトの名無しさん:2009/10/07(水) 01:27:58
C#使うくらいならC++/CLIにする
27デフォルトの名無しさん:2009/10/07(水) 03:16:32
なぜ
28デフォルトの名無しさん:2009/10/07(水) 03:31:14
企業主導の言語は使う気になれない。
29デフォルトの名無しさん:2009/10/07(水) 03:35:55
どの言語のことを
30デフォルトの名無しさん:2009/10/07(水) 04:15:49
C#
31デフォルトの名無しさん:2009/10/07(水) 07:01:56
とりあえず
JavaはもちろんC#, C++/CLIすらスレ違いなんだけど。
32デフォルトの名無しさん:2009/10/07(水) 09:20:52
STL mapはメモリに確保されますけど、
ディスクを使用して、メモリ量が減らせるmapは無いですか?

たとえば、char [10] -> intにmapを使用した場合、
最も使用量が減らせる場合でも一件登録するのに
8 * 10 + 4 =84バイト必要です。
100万件で84M使用します。これ以上行くと環境によって不安定になりそうです。
テンポラリファイル使えばよさげなんですが。
33デフォルトの名無しさん:2009/10/07(水) 09:58:29
84バイト?
34デフォルトの名無しさん:2009/10/07(水) 10:09:14
まちがえてました。
最低で10バイト + 4バイトでした。
いずれにしても、確保数が多いとメモリを圧迫します。
mapでディスク使用するライブラリなど無いですか?
35デフォルトの名無しさん:2009/10/07(水) 10:31:06
GDBMとかQDBMとかBerkeleyDBとか
36デフォルトの名無しさん:2009/10/07(水) 10:39:55
データベースですか。思いつきませんでした。
パフォーマンスが気になります。
こういうのは、C++で自作したとしても同じくらいの探索速度だったりしますか。
速さが大事なんです。
37デフォルトの名無しさん:2009/10/07(水) 10:43:35
>>36 試せ。
38デフォルトの名無しさん:2009/10/07(水) 11:04:54
わかりました
39デフォルトの名無しさん:2009/10/07(水) 12:55:22
効率悪そうだけど代入と暗黙変換でディスク読み書きするproxyのmapを作る、とかかな
40デフォルトの名無しさん:2009/10/07(水) 13:12:50
HDD使えるならPCなんだろうけど、
100Mや200M程度で不安定になるとかどんな骨董品だ。
41デフォルトの名無しさん:2009/10/07(水) 13:45:55
骨董品や、マルチタスクに対応するため、メモリ使用量が少ない方が良いです。
最低基準に合わした方が良いです。
42デフォルトの名無しさん:2009/10/07(水) 14:06:15
掛ける手間と出したい実行速度によりけりだな
速度重要だけど骨董品対応でSSE命令使えませーん とかもやだし
43デフォルトの名無しさん:2009/10/07(水) 14:15:16
あと、骨董品に対応するために手間暇かけて複雑な
ことやって、ついでにバグ多かった、というのは困るな。
44デフォルトの名無しさん:2009/10/07(水) 14:18:32
http://www.boost.org/doc/html/interprocess/allocators_containers.html#interprocess.allocators_containers.additional_containers
> ..., so programmers can store hash containers in shared memory and memory mapped files.
45デフォルトの名無しさん:2009/10/07(水) 14:47:44
>>42
手間かけたくないのでライブラリが良いんです。

>>44
メモリアロケータを自作すれば既存のやつがつかえそうですね。
でもやり方が良くわかりません。
46デフォルトの名無しさん:2009/10/07(水) 14:53:08
アロケータでぐぐればアロケータの作り方くらい出てくる。
47デフォルトの名無しさん:2009/10/07(水) 19:46:52
あの、マジで質問です。
入門からテトリスを自作できるまでの知識がすべて入った本ありませんか?
48デフォルトの名無しさん:2009/10/07(水) 19:47:19
>45
メモリ上で動作する事を基本としたライブラリをディスク上で使用するのと、
ディスク上で動作する事を前提としたライブラリをディスク上で使用するのと
どっちが効率がいいと思う?

あと >35 が挙げているのは「データベース」と言った場合に一般的に想起される RDBMS じゃなくて、
キー・バリュー・ストアだから機能としては map とほとんど変わらない。
49デフォルトの名無しさん:2009/10/07(水) 19:51:45
>>47
googleで検索して印刷してまとめれば探してる本になるよ
50デフォルトの名無しさん:2009/10/07(水) 19:53:34
>>49
天才すぎわろたwwww
天才乙。天才って本当にいるんだな
51デフォルトの名無しさん:2009/10/07(水) 21:12:24
Windowsゲームプログラミングという本があってだな
52デフォルトの名無しさん:2009/10/07(水) 21:22:04
これがテトリスのすべてだ。

<body onKeyDown=K=event.keyCode><script>X=[Z=[B=A=12]];h=e=K=t=P=0;function Y()
{C=[d=K-38];c=0;for(i=4;i--*K;K-13?c+=!Z[h+p+d]:c-=!Z[h+(C[i]=p*A-Math.round(p/
A)*145)])p=B[i];!t|c+4?c-4?0:h+=d:B=C;for(f=K=i=0;i<4;f+=Z[A+p])X[p=h+B[i++]]=1
if(e=!e){if(f|B){for(l=228;i--;)Z[h+B[i]]=k=1;for(B=[[-7,-20,6,17,-9,3,6][t=++t
%7]-4,0,1,t-6?-A:-1];l--;h=5)if(l%A)l-=l%A*!Z[l];else for(P+=k++,j=l+=A;--j>A;)
Z[j]=Z[j-A]}h+=A}for(i=S="";i<240;X[i]=Z[i]|=++i%A<2|i>228)i%A?0:S+="<br>",S+=X
[i]?"■":"_";document.body.innerHTML=S+P;Z[5]||setTimeout(Y,99-P)}Y()</script>
53デフォルトの名無しさん:2009/10/07(水) 21:23:29
基本から学べます?
てか、買ってみようかな。
54デフォルトの名無しさん:2009/10/07(水) 21:27:50
基本ってどこから?
ゲーム以外の入門書はクリアしたれべるとか。
55デフォルトの名無しさん:2009/10/07(水) 23:59:44
>>53
つーかお前の実力の程は?
少なくとも猫のページとか程度はC言語はわかるんだよね?

わずか565バイトテトリスのプログラミング解説
ttp://zapanet.info/blog/item/1125

こういうの見てもめげない?
56デフォルトの名無しさん:2009/10/08(木) 00:04:23
めげる必要がどこにあるのやら
57デフォルトの名無しさん:2009/10/08(木) 01:13:42
>>55
意味不明です。
58デフォルトの名無しさん:2009/10/08(木) 02:22:26
>>55
C++スレでCの理解力、JavaScriptの読解力を求める理由を教えてくれ
59デフォルトの名無しさん:2009/10/08(木) 04:59:43
前者はわからなくもないが
6055:2009/10/08(木) 11:01:13
何?
そんなに知りたい?
61デフォルトの名無しさん:2009/10/08(木) 11:04:09
http://codepad.org/Lc4unIGH

上記のプログラムですが、入力ファイルより
数値を取り込む際、すべて0として取り込まれてしまいます

原因のわかるかたご教授のほどよろしくお願いします
62デフォルトの名無しさん:2009/10/08(木) 11:24:13
>>61
これはひどい。まともに読む気にならない。

まずは int main() に。コンパイルエラーが出るようじゃ話にならん。

次は、 18 とか 5 とか 8640 とかの意味のわからん即値を int const とかの
名前つき定数にする。ループ範囲の間違いがあればこれで見つけやすくなる
だろう。

次は、処理が ////... で区切られてるあたりを目安に関数に分ける。
ひとつの関数内でしか使わない変数はローカル変数に。複数の関数で共有する
変数は引数で渡すのがいいんだけど、難しいようならとりあえずグローバルに
しても、 main() いっこで完結してるこのプログラムならあまり問題ない。

これぐらいやれば、途中で間違いが見つかるんじゃないかなぁ?
少なくとも人に読んでもらえるコードには近づくだろうね。
63デフォルトの名無しさん:2009/10/08(木) 11:54:09
確かに読む気起きないコードだね。printf を表示するとデータ0だと言うことかな。
void とか、コードのスタイルとか、CをC++に中途半端に移行させた
ような感じのコードだな。(通す compiler もあるのかな。)

まず、コードを削って、初めの fscanf だけで 66行目までで徹底的に調べたら?
全部0ならそこでわかるはず。
どうでも良いことだけど 61行目は62行めのカッコのあとだろうね。

60,124行目 format が %.1lf に見えるけど、これ平気なのかな。
double なら %lf だし、%.1lf だと g++ なら compile error 出す。
compile しないならわかるんだけどね。
他のところは %lfになってるのかな。
64デフォルトの名無しさん:2009/10/08(木) 12:53:04
ファイル名をsprintf()のフォーマット文字列で定義しているのも問題だな。
sprintf(tmpt, "%s", FILE_NAME_2004)と言う風にしておくべきだし、それくらいなら
fopen(FILE_NAME_2004, "r")でいい。
65デフォルトの名無しさん:2009/10/08(木) 13:03:45
Cプログラミング診断室でしか見た事のないようなコードだな…
こんなの書くヤツが実在したとは…
66デフォルトの名無しさん:2009/10/08(木) 13:18:50
俺が書くともっと酷いコードになるぜウヒャヒャww
67デフォルトの名無しさん:2009/10/08(木) 14:04:01
この板の住人は優しいようで、厳しいようだ。

BOSS カンコーヒー
68デフォルトの名無しさん:2009/10/08(木) 14:07:36
レインボーマウンテン
69デフォルトの名無しさん:2009/10/08(木) 14:28:03
あるクラスをLIBに納めたいんだが、
それは継承して使うクラスなんだけど、privateメンバを隠蔽したい。

でもヘッダに書かないと
「ヒープが壊れています」
でも書きたくない。

これ、どうすればいいんでしょ。
そもそもムリ?
70デフォルトの名無しさん:2009/10/08(木) 14:29:30
べつのクラスから継承したクラスをよびだせよ
71デフォルトの名無しさん:2009/10/08(木) 14:32:35
すまん、さっぱりわからんだ
72デフォルトの名無しさん:2009/10/08(木) 14:34:16
公開用と開発用でヘッダファイルを分けちゃいかんのだろか。
73デフォルトの名無しさん:2009/10/08(木) 14:42:07
分けてる

// innerA.h (内部LIB)
class A
{
int b;
public:
A() { /* うんぬんかんぬん */ }
virtual ~A(){ /* うんぬんかんぬん */ }

void Set(int val)
{
b = val;
}

virtual void Override() = 0;
};

// outA.h (公開)
class A
{
public:
A();
virtual ~A();
void Set(int val);
virtual void Override() = 0;
};

で、これを継承してvoid Set(int val)を実行 → ヒープ爆破

実は本格的なLIB作成経験あまりなし
74デフォルトの名無しさん:2009/10/08(木) 14:48:03
提供する機能だけのクラスを作って仲介すれば良いんでは?
75デフォルトの名無しさん:2009/10/08(木) 14:48:48
普通同じクラスならヘッダは同じものを使う
君のやりたいことはFactorパターンとかを調べればおk
76デフォルトの名無しさん:2009/10/08(木) 14:54:01
>>74
提供するだけというと?
77デフォルトの名無しさん:2009/10/08(木) 15:05:14
>>73
それじゃ違うものに同じ名前をつけているだけ。
そうではなくて、公開しないメンバには違う型と名前でダミーメンバを用意してサイズを合わせるの。

まぁ、>75だな。
78デフォルトの名無しさん:2009/10/08(木) 15:21:16
どっちかと言うとfactoryよりもpimplのような気がする
7969:2009/10/08(木) 15:23:47
>>75

パターンについては(ググって)わかったけど、
実装の仕方がいまいちわかりません・・・
80デフォルトの名無しさん:2009/10/08(木) 15:25:10
age
8169:2009/10/08(木) 15:34:11
Pimpl、やってみたいと思います
82デフォルトの名無しさん:2009/10/08(木) 16:48:25
privateメンバの隠蔽と聞いたら真っ先にpimplを検討する
83デフォルトの名無しさん:2009/10/08(木) 17:26:06
float radius
に円の半径を格納するけれども描画時には
その半径をそのまま使わずに10段階ぐらいに分ける
プログラムを作りたいのですが速度を重視する場合
どのようにするのが良いでしょうか?
例えばraiusを0.0 〜 100.0の範囲に収めるようにして
radius/10をすれば(int)radiusで整数で10段階に分ける
事が可能ですが割り算は使いたくないです。
0.1を掛ければ速いのか・・・
それにしても(int)へ変換すると遅いのかな?
switch使うよりも少数のまま
if(radius < 10.0)
・・・
else if(radius <20.0)
って地味に分ける方がいいのかな?
何か良い方法はあるでしょうか?
84デフォルトの名無しさん:2009/10/08(木) 17:30:53
>>83
本当にその割り算がボトルネックであると言う充分な観測が得られたのでなければ、
素直に割り算を使うのがいいと思うよ。
つーか、どうせ定数の割り算はまともなコンパイラなら乗算するコードを出力してくれるし。
85デフォルトの名無しさん:2009/10/08(木) 17:36:46
>>84
>の割り算がボトルネックであると言う充分な観測が得られたのでなければ

円の数が多く出せれば多いほど良いという前提でプログラムを組んでいますので
ボトルネックとまで言えなくても最善を尽くしたいです。
86デフォルトの名無しさん:2009/10/08(木) 17:38:43
恐らくは、「円を出す」という処理の方が圧倒的にその割り算より低速ですから、そのような考察は無意味です。
87デフォルトの名無しさん:2009/10/08(木) 17:41:46
float は誤差が生まれるから素直に if にしといた方がいい。
88デフォルトの名無しさん:2009/10/08(木) 17:42:18
メモリ=バッファへ書き出すんだろ。
89デフォルトの名無しさん:2009/10/08(木) 17:47:14
1+(int)radius/10が最善だろうとおもうが、もしかしたら微妙に速くできるかもしれない。
90デフォルトの名無しさん:2009/10/08(木) 17:50:11
0.1 = 2^-3 + 2^-4 + ・・・だから

n/10 = n*0.1 = (n>>3) + (n>>4) +となる。

大して変わらないとは思うがな。
91デフォルトの名無しさん:2009/10/08(木) 17:55:06
>>88
そうです。>>86描画自体はビデオカードが担うのでここでは考慮外で構いません。
>>87
区切り方はアバウトでも良いです。
92デフォルトの名無しさん:2009/10/08(木) 18:03:32
(2^(-4)) + (2^(-5)) + (2^(-8)) + (2^(-9)) = 0.0996 だな。

1 + (n>>4) + (n>>5) + (n>>8) + (n>>9) となるが、右の方は常に0だから

1 + (n>>4) + (n>>5) だけで正確な割り算なるな。
93デフォルトの名無しさん:2009/10/08(木) 18:06:00
別に10段階じゃなくてもいいです。
>>90の式の意味が理解できない馬鹿タレですが
floatでも8で割るなら
radius >> 3 でOKですか?
94デフォルトの名無しさん:2009/10/08(木) 18:07:25
だからぁ、描画リクエストと割り算(実際には掛け算になる)一個のコストを比較しろtって。
95デフォルトの名無しさん:2009/10/08(木) 18:07:59
ダブルバッファ、トリプルバッファ、4バッファなどを工夫する方が良い。
FPSを幾つにするのかも大事。
ここをうまくやらないと、どんな計算したところで無駄。
圧倒的に描写は時間食う。
96デフォルトの名無しさん:2009/10/08(木) 18:11:27
>>94
描写間隔が1/60だとして、
工夫なしだと10万個が、工夫したら10.5万個だったら意味あるじゃん。
97デフォルトの名無しさん:2009/10/08(木) 18:22:09
>>92
x0.1で終わりだろ。
加減算と乗算の差は高々3クロックぐらいで
それは意味が無い。
98デフォルトの名無しさん:2009/10/08(木) 18:26:46
>>95
メモリの量が莫大になるので、バッファを増やすのは
どうでるか分かりませんが試せる事は全部やって見ようと思います。

だいたい分かりました。ありがとうございました。
99デフォルトの名無しさん:2009/10/08(木) 18:28:39
直接描写で無いとしても、
バッファ=メモリに転送するのが、圧倒的に時間かかりそう。
描写という用途では、/10の計算を工夫したところで意味ないだろ。
画面構築を手抜きする方法でも考えた方が良いんでは?

100デフォルトの名無しさん:2009/10/08(木) 18:37:30
ビデオカードの特性、アクセス方法を調べるほうが高速化になるな。

101デフォルトの名無しさん:2009/10/08(木) 18:38:53
つーか命令をメモリからフェッチするだけで負荷になるんだから、ボトルネック
でもないところを無駄に長々と書くのはパフォーマンスが落ちるんだよ
分かったらボトルネック以外は気楽に書け
102デフォルトの名無しさん:2009/10/08(木) 18:39:07
質問の内容はradiusに値を収める手段。
いかに円を多く表示する方法じゃない。
そこんとこ勘違いしないように。
103デフォルトの名無しさん:2009/10/08(木) 18:39:40
メモリfloat1個分の確保とfloatの掛け算じゃ
確保が圧倒的に時間掛かるだろうが
float10万個をまとめて転送するのとfloat10万個を
それぞれ掛け算するのは・・・ねぇ?
104デフォルトの名無しさん:2009/10/08(木) 18:43:17
GPUプログラム研究しろ。
256並列とかの計算できるからさ。
ビデオカード直アクセスが一番効果でる。
やったことは無い。
105デフォルトの名無しさん:2009/10/08(木) 18:49:20
CUDA
ここではGPGPU向け統合環境の一つ、NVIDIAのCUDA(Compute unified device architecture)を使って、大規模並列計算を行ってみる。
NVIDIAによれば、並列度の高い処理ではCPUと比べておよそ10倍以上の速さで処理できるという。
http://tech.ckme.co.jp/cuda.shtml


CUDA技術によるGPUコンピューティングは,数百のオンチップ・プロセッサ・コアが連携して同時に数値計算を行う新しいコンピューティング手法。
演算上の複雑な問題を従来型のアプローチと比べて最大100倍の速度で解決できるという。
http://itpro.nikkeibp.co.jp/article/USNEWS/20061110/253263/
106デフォルトの名無しさん:2009/10/08(木) 19:09:07
>>105>>104
CUDAは環境依存だしグラフィクスプログラムとの相性も悪いかも。
まぁ、計算量が増えて尚且つ並列性が確保できているなら
シェーダーでの演算とかから試してみるつもりです。
107デフォルトの名無しさん:2009/10/08(木) 19:09:08
GPGPUをよく知らないで適当に張ってるだけにしか見えない
108デフォルトの名無しさん:2009/10/08(木) 19:19:38
>>93
>floatでも8で割るなら
>radius >> 3 でOKですか?
ダメです

とりあえず(int)radius/10が妥当に一票
素直に書けばオプティマイザが良きに計らってくれるので
そのあとプロファイラでボトルネックを探せばいいんじゃない?
109デフォルトの名無しさん:2009/10/08(木) 19:27:53
struct bound { int val_; bound(int v) : val_(v) {} };
struct range { int lw_, up_; range(bound lw, bound up_) : lw_(lw.val_), up_(up.val_) {} };

range operator , (bound lw, bound up) {
return range(lw, up);
}

class f_array { f_array(range r) {/* rのlw_, up_を境界にもつ配列を作る */;} };

int main(void)
{
f_array fa(3,6);

fa(3) = ・・・;
・・・
fa(6) = ・・・;


上のようにカンマ演算子をオーバーロードしたんですが期待した動作をしてくれません
カンマ演算子が働く前にただのoperator ,(int, int)と判断されて片方が捨てられもう片方がintとして残ってしまいます
暗黙の変換を使う前提でint, intよりもbound, boundを優先させる方法は無いでしょうか?
110デフォルトの名無しさん:2009/10/08(木) 19:29:44
>>108
マジっすか!!
御指摘ありがとうございました。
111デフォルトの名無しさん:2009/10/08(木) 19:32:16
つーかね。厳しいかもしれんけど、はっきり言っちまうよ。

> floatでも8で割るなら
> radius >> 3 でOKですか?

こういうレベルの人にはゴリゴリの最適化とか無理。不可能じゃないけど、手探り
してる時間があったらハードウェアの勉強をした方が早いくらいに非効率的。

普通に書いてプロファイラで遅いところだけ絞り込む、っていう手法がどうしても
嫌なら、floatの中身は何なのか、そもそもCPUがどうやって動いてるのか、そういう
ところを勉強しなきゃ無理。じゃなきゃ、効率を上げようとしても逆に効率を落とし
かねない。「ここがハードの限界に近いな」ってところを見極められない限り、どこ
で最適化を終了させていいのかも分からないだろ?
112デフォルトの名無しさん:2009/10/08(木) 19:36:23
試行錯誤してそれなりに高速化したつもりのコードなのに、低水準を分かってる奴が
書き換えたら数十倍速になっちゃったりするって奴だな
113デフォルトの名無しさん:2009/10/08(木) 19:42:41
>>111
概ね異論はないです。
floatの中身をきちんと調べます。
地道にやります。サンクス。
114デフォルトの名無しさん:2009/10/08(木) 20:00:55
char *p と 長さ size が与えられたとき、string型を作るにはどうしたらいいですか?
115デフォルトの名無しさん:2009/10/08(木) 20:02:10
C++留置場
116デフォルトの名無しさん:2009/10/08(木) 20:17:21
1msも調べないで聞いている>>114は、死ねばいいと思うよ。
117デフォルトの名無しさん:2009/10/08(木) 20:20:13
string s(p, size);
だけでよくなかったっけ
118デフォルトの名無しさん:2009/10/08(木) 20:21:32
p[size]='0';
string s(p);
とか教えてやればいいのにw
119デフォルトの名無しさん:2009/10/08(木) 20:22:23
自己解決しました。

string( p, size ); で出来た気がしてたのに出来ずに質問しました。

unsigned char *だったのが駄目でした。
120デフォルトの名無しさん:2009/10/08(木) 20:23:52
すみません。回答ついてたのも見なくて、後で自己解決と書いてしまいました。
サンクス。
121デフォルトの名無しさん:2009/10/08(木) 20:25:46
>>118 それだと、途中で0があると切れますよ
122デフォルトの名無しさん:2009/10/08(木) 20:27:51
>>121
他にもっと突っ込むべきとこがあるだろw
つーかわざとだろ
123デフォルトの名無しさん:2009/10/08(木) 21:14:42
非常に不可解なことが起こっていて悩んでいます。

visual studio 2008で開発しているのですが、
ダイアログで設定して、一度変数に代入した値が、
いつの間にか書き換わってしまうのです。
その変数に代入される箇所はすべてブレークポイントを設定して
チェックしたのですが・・・。
ある一つの変数だけでなく、いたるところでそのような現象が見られるのですが
原因は何が考えられるのでしょう。

他で開発されたソフトに付け足して使っているという状態ですが、
それが関係するのでしょうか?

よろしくお願いします。







124デフォルトの名無しさん:2009/10/08(木) 21:23:17
>>123
配列のオーバーラン
添え字の範囲を無視して代入してないかい?
それかスタックオーバーフローか
125デフォルトの名無しさん:2009/10/08(木) 21:23:33
>>124
配列のサイズをオーバーして書き込んだり、
解放済みのメモリブロックに書き込んだり、
どこを指しているかわからない未初期化のポインタが指している位置に書き込んだり、
といったことをしていると、そういうことが起きる
126デフォルトの名無しさん:2009/10/08(木) 21:23:38
>>123
配列やバッファのオーバーラン/アンダーランが発生している可能性。
127125:2009/10/08(木) 21:25:08
すまん、間違えた。訂正。
× >>124
>>123
128デフォルトの名無しさん:2009/10/08(木) 21:25:12
>>123
デバッガに、特定の変数が書き換えられたらとまる機能ってなかった?
129123:2009/10/08(木) 22:18:51
なるほどー。チェックしてみます
130デフォルトの名無しさん:2009/10/09(金) 01:10:42
>>109
fa(3,6) のカッコ内のカンマは、関数引数の区切り。カンマ演算子じゃない。
fa((3,6)) これだとカンマ演算子。

> 暗黙の変換を使う前提でint, intよりもbound, boundを優先させる方法は無いでしょうか?
無いよ。

っていうか、そんなことができる宣言が可能だとすると、 operator , (int, int) を
使っていた既存のプログラムの意味をこっそりぶち壊すことができてしまう。
そんな危険なことはできないようになっているのが自然。
131デフォルトの名無しさん:2009/10/09(金) 02:19:29
カンマ演算子や論理演算子のオーバーロードはしないのが基本だけど、何が問題と
なるのかを正しく理解した上で敢えてやることはある
でも、理解してるようには見えないので、やるな
132デフォルトの名無しさん:2009/10/09(金) 06:56:24
>>131
> 正しく理解した上で敢えてやることはある
変態ライブラリの中にはあるよね。
133デフォルトの名無しさん:2009/10/09(金) 08:44:07
全くC++には見えないようなコードになるライブラリだよなw
134デフォルトの名無しさん:2009/10/09(金) 13:43:12
いちどだけ少量、多数ファイルを読み込む場合
Windowsのキャッシュを通さないほうが速いですか?
キャッシュ通さない場合、
読み込み位置、読み込みサイズ、読み込むバッファ位置が
セクタサイズの整数倍とか条件が面倒なのですが。
やる価値ありげならやろうと思います。
135デフォルトの名無しさん:2009/10/09(金) 13:46:05
>>134
スレ違い。
なんで速くなると思うのかの説明を追加して、↓ここらへんにどうぞ。
http://pc12.2ch.net/test/read.cgi/tech/1254843018/
136デフォルトの名無しさん:2009/10/09(金) 14:46:52
昨日か一昨日からテトリス自作を考えてるものです
将来はゲームプログラマになりたいと思います。
テトリス自作までの学習が効率良くできるサイトありませんか?
(※入門〜)
137デフォルトの名無しさん:2009/10/09(金) 14:50:06
>>136
HSPへいけば?
138デフォルトの名無しさん:2009/10/09(金) 16:25:59
つ DarkBASIC
139デフォルトの名無しさん:2009/10/09(金) 16:29:13
それ有料だし。 HSPでいいだろう。
なに言語でも完成品を作れることが大事。
他の言語でも、部品の品ぞれえが悪いかもしれないが、
そこがなんとか出来ればアルゴリズムには違いはないからな
140デフォルトの名無しさん:2009/10/09(金) 16:34:07
141デフォルトの名無しさん:2009/10/09(金) 16:40:15
>>139
HSP自体が完成してねーじゃんw
142デフォルトの名無しさん:2009/10/09(金) 16:41:08
全米が噴いた( ´,_ゝ`)プッ
143デフォルトの名無しさん:2009/10/09(金) 18:25:36
Stoping now! ぼくはC++で作りたいんです!
144デフォルトの名無しさん:2009/10/09(金) 18:32:39
テトリスはC++っていうよりもC部分で作るのが面白そうだな。
ビット演算とかシフトといかにもCっぽい操作ばかりで作るんじゃん?
145デフォルトの名無しさん:2009/10/09(金) 18:40:07
>>143
C++にこだわるな。物には順序がある。
HSPで作れなければプログラム適正がない可能性有り。
早めに見切りが付けられる。
HSPは日本語でゲーム開発するための資料が多いし、材料も揃っている。
これで駄目なら何やっても無理。
146デフォルトの名無しさん:2009/10/09(金) 18:41:32
- 日本では相手にされないと嘲笑されたDarkBASICですが、VCの追い抜き体勢に入りましたね。

日本は封建主義的な社会ですので外来種は常に跳ね返す癖が付いています。

- しかし昨今の世相を見渡しますと、食料品から政権交代までダメなものは国産品でも跳ね返しますね(笑)

確かに、実際に機能しないものは実力行使で跳ね返す癖も付いてきたと言えますね。

- そもそもDarkBASICのユーザー層はどこに重点を置いているのですか。

従来の複雑なWindowsAPIに依存しない、手軽で簡素な3Dプログロミングを楽しめるところでしょうね。
これがかなりのウェイトを占めていると思いますし、Linuxのユーザー層にも移管しやすい好材料です。

- APIはそんなに複雑ですか。

いったん理解すれば難しくはありませんが、ある程度の学習とノウハウ蓄積が必要になります。
これが初心者にとっては大きな障壁になります。

- DarkBASICが日本で注目されるようになったのはいつ頃でしょうか。

まだ注目されていません(笑)
DarkBASICを好んで使うと予想されるユーザー層は、現在のところHSPを使っています。

- HSPはフリー(無料、無償)で3Dプログラミングが可能な簡易言語として広く認知、普及していますね。

HSPは国産のプログラミング言語で、API、DLLを組み合わせて広範な3Dプログラミングが可能です。
中学生程度でも柔軟に使いこなしている実例があります。

- ではDarkBASICは日本での必要性を感じないのでは?

ところがそうではない情勢なんですね。
147デフォルトの名無しさん:2009/10/09(金) 18:59:02
>>145
っていうことはCやってるこのスレのみなさんは
HSPから始めてるんですか?
148デフォルトの名無しさん:2009/10/09(金) 19:12:45
目的によるだろ
ゲームプログラマならHSP→…→C++というコースはけっこういると思う
それ以外だとアセンブラかCから来てる奴がほとんどじゃないの
あとは関数型から来てるTMPマニアの変態ども
149デフォルトの名無しさん:2009/10/09(金) 19:42:04
>>143
ゲ製作板いけ
おあつらえ向きのスレもあるようだぞ

テトリスを作る
http://pc11.2ch.net/test/read.cgi/gamedev/1033977194/

別にプログラムに限った話じゃないが、まだロクに手付けてないのに
「効率的な学習法」とか考えたり調べたりしてるのが一番非効率だぞ
何でもイイからサッサとヤレ。
150デフォルトの名無しさん:2009/10/09(金) 20:06:25
>>148
>>149
ありがとうございます
さっそくゲ製作板に行きたいと思います
とりあえずHSPやってみたいと思います。
151デフォルトの名無しさん:2009/10/09(金) 20:11:30
なーんてね(゚∀゚)
152デフォルトの名無しさん:2009/10/09(金) 20:15:01
2007年8月12日
ちっちゃなテトリス

HSP3のスクリプトを垂れ流すブログ: バイナリデータの検索 http://rpen.blogspot.com/2007/08/blog-post.html
153デフォルトの名無しさん:2009/10/09(金) 20:15:45
154デフォルトの名無しさん:2009/10/09(金) 20:31:52
テトリススレ行ってみましたけど、
ぱっと見た感じ知能指数が弱いように見えます
質問したら叩かれそうです
>>152
え・・そんなスクリプト垂れ流しされても困ります・・><
155デフォルトの名無しさん:2009/10/09(金) 20:39:34
10/31までに完成したらここへ参加しよう




HSPプログラムコンテスト2009
HSPプログラムコンテストは、プログラム言語HSP(Hot Soup Processor)により
作られた作品を募集し表彰するイベントです。
すべての応募作品は無料で公開され、ダウンロードできますので、
作品を見てみたいという人も大歓迎です。
HSPを使っている人も、そうでない人も楽しむことができる自作プログラムの祭典にぜひご参加ください。
詳しくは、下のリンクをご覧ください。

締切りまで1ヵ月になりました
いよいよ10月に入って残り期間1ヵ月となりました。
多くの作品ご応募頂き、ありがとうございます。
ギリギリまで製作されている方は、最後の追い込み頑張ってください。
そして、これから製作する人もまだ間に合いますので、ぜひコンテストにご参加ください。
http://hsp.tv/contest2009/
156デフォルトの名無しさん:2009/10/09(金) 20:48:48
HSPのお勧め入門サイト教えてください・・・

本買おうかな・・
157デフォルトの名無しさん:2009/10/09(金) 20:53:31
スレ違すいません
今すぐ、ここを出て行きますから許してください
158デフォルトの名無しさん:2009/10/09(金) 20:53:39
まずは、サンプルでも動かしてみてどんなのが出来るか見てみれば?

hsp\sampleにあるやつ。

HSPTVからもデモみれたとおもうが。
159デフォルトの名無しさん:2009/10/09(金) 20:57:10
HSP( ´,_ゝ`)プッ
160デフォルトの名無しさん:2009/10/09(金) 21:00:35
>>158
いいですね。
でもHSPって低脳がやってるイメージがあるし、やっぱりやめようかと考えてます。
・・・でもやっぱりHSPから入ったほうがいいですかね・・?
最終的には3Dのゲーム製作なんですが・・
161デフォルトの名無しさん:2009/10/09(金) 21:06:49
C++とHSPの差はやることを短縮できる違いがあるだけ。速度の違いもあるが。
堀井雄二はドラゴンクエストの制作者だが、
本人はプログラム出来ないし、どんな言語で作られてるかも知らないだろう。
ゲームの面白さは言語に依存しない。
162デフォルトの名無しさん:2009/10/09(金) 21:08:08
つ DarkBASIC
163デフォルトの名無しさん:2009/10/09(金) 21:12:05
ドラクエは外注で開発するのは何でなんだろう。
九州の会社だろ。
合併して人材豊富と思うが。
164デフォルトの名無しさん:2009/10/09(金) 21:13:05
>>161
重要なのはアイディアですね
ゲームに一番向いてる言語とかあります?
つまり
どの言語でもゲームは作れるし、大差はないってことですか?
165デフォルトの名無しさん:2009/10/09(金) 21:14:56
- 間もなくVCが新種のDarkBASICに追い抜かれますが

確かにC言語の衰退は避けられない事実です。

- それはどうしてですか

趣味でC言語を体得しようとするプログラマがいないからでしょうね。

- 会社で使ってるのに趣味で使いたくない?

そうでしょうね。
そもそもC言語は生産効率向上には寄与しなかったと言う事実があります。
仕様書を噛み砕くだけの、馬耳東風な感覚では愛着が湧かないでしょう。

- 将来的にCプログラマは切り捨てられる?

すでに旧来のCプログラマは他の言語に移管してると思います。
職業的にもCでは使えない状況ですし。

- 加速するIT化に対応できないと言うことですか。

他の言語群がCを包括的に上回っています。

- BASIC言語の台頭の可能性はあると思いますか。

あるでしょうね。
言語仕様が簡素化されて生産効率が上がれば可能性はあると思います。

- かつてCはBASICより速い実行コードを生成すると自慢していましたが。

それは過去の幻想でしょうね。
166デフォルトの名無しさん:2009/10/09(金) 21:16:08
だからゲ製作板いけっつの
知能指数が低そうだから、知能指数が低そうなスレ選んでやったのもわからないくらい知能指数低いの?
167デフォルトの名無しさん:2009/10/09(金) 21:17:28
- 日本では相手にされないと嘲笑されたDarkBASICですが、VCの追い抜き体勢に入りましたね。

日本は封建主義的な社会ですので外来種は常に跳ね返す癖が付いています。

- しかし昨今の世相を見渡しますと、食料品から政権交代までダメなものは国産品でも跳ね返しますね(笑)

確かに、実際に機能しないものは実力行使で跳ね返す癖も付いてきたと言えますね。

- そもそもDarkBASICのユーザー層はどこに重点を置いているのですか。

従来の複雑なWindowsAPIに依存しない、手軽で簡素な3Dプログロミングを楽しめるところでしょうね。
これがかなりのウェイトを占めていると思いますし、Linuxのユーザー層にも移管しやすい好材料です。

- APIはそんなに複雑ですか。

いったん理解すれば難しくはありませんが、ある程度の学習とノウハウ蓄積が必要になります。
これが初心者にとっては大きな障壁になります。

- DarkBASICが日本で注目されるようになったのはいつ頃でしょうか。

まだ注目されていません(笑)
DarkBASICを好んで使うと予想されるユーザー層は、現在のところHSPを使っています。

- HSPはフリー(無料、無償)で3Dプログラミングが可能な簡易言語として広く認知、普及していますね。

HSPは国産のプログラミング言語で、API、DLLを組み合わせて広範な3Dプログラミングが可能です。
中学生程度でも柔軟に使いこなしている実例があります。

- ではDarkBASICは日本での必要性を感じないのでは?

ところがそうではない情勢なんですね。
168デフォルトの名無しさん:2009/10/09(金) 21:17:47
チャーチ・チューリングのテーゼというのがあってだな
まともなプログラミング言語は速度の差こそあれ
「出来ること」は全て同じであることがわかっている
169デフォルトの名無しさん:2009/10/09(金) 21:20:00
では実証してみましょう(笑)
170デフォルトの名無しさん:2009/10/09(金) 21:20:08
>>166
すぐ噛み付くあんたも知能指数低い
171デフォルトの名無しさん:2009/10/09(金) 21:30:40
結論→大規模なプログラムを組むならC++
    簡単テトリスはHSP
172デフォルトの名無しさん:2009/10/09(金) 21:32:53
>>163
時間が無限に使えれば、アセンブラでもコボルでもフォートランでも3Dゲーム作れるだろ。
ハードウェアにアクセスする部分は、言語単体では無理かもしれないが。そこは自作すれば。
一番、自分がやることが少なくて3Dの勉強になるのは、HSPと思う。
173デフォルトの名無しさん:2009/10/09(金) 21:33:05
>>161
堀井雄二はプログラミング「できた」よ。
旧エニックスのホビープログラミングコンテストの佳作獲ったのが縁で
ドラクエ作ることになったんだから。

もちろん、現代のゲームプログラミングの技術を、現役のマと同レベルで
理解しているはずはないけど、言語もわからないような全くのプログラミング音痴ではない。
特に初期ドラクエはメモリ容量との戦いで、あと1KB削るために、1000センテンスある台詞から
平均1文字ずつ削っていったとか、そういう開発してたらしいから。
ディテールは分からずとも、ゲームを組むということの大まかなフィーリングを
マと共有することはできるはずで、それって本当の未経験者にはできない大きなことだと思う。
174デフォルトの名無しさん:2009/10/09(金) 21:39:27
そもそも堀井はシナリオライターでメインプログラマーは中村なんだからどうでもいいだろ
>>173の言うとおり堀井は全くのプログラム音痴なわけじゃない
175デフォルトの名無しさん:2009/10/09(金) 21:40:54
なんか同世代らしき人を発見。
176デフォルトの名無しさん:2009/10/09(金) 21:52:31
ニワンゴもチュンソフトも、ドワンゴの傘下だったんだな。いま知った。
チュンソフトは敵対的買収されたの? 経営難だったの? 買収されるとは意外だった。
177デフォルトの名無しさん:2009/10/09(金) 21:58:17
- ではDarkBASICは日本での必要性を感じないのでは?

ところがそうではない情勢なんですね。

- 具体的にはどういった情勢なんですか。

人的負荷(Human-overhead)の問題を回避できない背景があります。

- 分かりやすく解説して下さい。

ヒューマンオーバーヘッド(以下H.O.H.)の問題は、1つのプログラムを作成する場合に、1つの言語やプラットホーム
の知識だけではなく、複数に跨る言語やプラットホームの知識を必要とする場合によく発生します。

- それがDarkBASICとどう関係するんですか。

DarkBASICはH.O.H.の問題を回避できるようにAPIやハードウェアの個体差を窺いながらプログラミングをする必要が
ありません。

もちろん、すべてではありませんが(笑)

- それはどのような場合に効力を発揮するのでしょうか。

3Dプログラミングにおいて抜群の生産効率を発揮するでしょうね。

- それはCやHSPでもAPIや外部のDLLを使えば簡単にできるでしょう?

確かにそのとおりです、しかしH.O.H.の問題は解決できません。

- 生産効率向上には何が必要なのですか。

体系的に簡素化された言語仕様、これに尽きますね。
178デフォルトの名無しさん:2009/10/10(土) 00:05:20
教えてください。
↓はコンパイルできるんですが、Widget()は左辺値を生じないので
コピーコンストラクタには右辺値が渡され、仮引数型にconstがないので
コンパイルできない筈では?

struct Widget {
Widget() {}
Widget(Widget&) {}
};

int main() {
Widget w(Widget());
}
179デフォルトの名無しさん:2009/10/10(土) 00:09:05
二次元コンテナのイテレーターってどういう仕様がいいんだろう
やっぱイテレーターのイテレーターかな
180デフォルトの名無しさん:2009/10/10(土) 00:13:05
>>178
const付けなかったらただのコンストラクタじゃん
181デフォルトの名無しさん:2009/10/10(土) 00:18:37
>>178
もし、VCなら警告レベルを4にして試してみよう。
182178:2009/10/10(土) 00:27:39
>>181
g++ 4.3.3 で -Wall でコンパイルしましたが特に何も出ません。

JISX3014の「8.5.3 参照」の「5 1)」に右辺値の参照適合に関する記述がありますね。
コピーコンストラクタは右辺値でも参照できるということでいいのかなぁ
183デフォルトの名無しさん:2009/10/10(土) 00:33:36
VCだと非標準の拡張機能の警告がでるけど。
184デフォルトの名無しさん:2009/10/10(土) 00:36:41
最適化されて、警告を出さないみたいだけど
185デフォルトの名無しさん:2009/10/10(土) 00:40:25
>178
コンストラクタの呼び出しじゃなくて関数宣言(Widget を返し、Widget を引数にとる w という関数)だと解釈されてるんじゃないの?
186178:2009/10/10(土) 00:42:41
>>185
それだとコンパイルエラーが出たんですよ。
で、「コピーコンストラクタでは?」と試したところ異なる結果が出てここに相談に来た次第で。

「12.2 一時オブジェクト」の「5」の参照が一時変数に結合される場合に当てはまってるのかなぁ
187デフォルトの名無しさん:2009/10/10(土) 00:42:43
それは警告が出るから
Widget w((Widget()));
にして試した。
188178:2009/10/10(土) 00:44:18
ごめんなさい、関数呼び出しじゃなくて関数宣言ですか。
読み間違えました。
189185:2009/10/10(土) 00:46:42
訂正。
「引数なしで Widget を返す関数へのポインタ」を引数にとり、Widget を返す w という関数

Widget w((Widget()));
これでお望み通りエラーが出ると思う。

「C++で最も奇妙な解析」(Effective STL 第6項)ってやつ。
190178:2009/10/10(土) 00:53:04
なるほど。
試しにメンバ変数xを追加してw.xをアクセスすると怒られますね。

./test.cc:11: error: request for member ‘x’ in ‘w’, which is of non-class type ‘Widget ()(Widget (*)())’

Effective STL 読んで勉強してきます。どうもでした。
191デフォルトの名無しさん:2009/10/10(土) 09:32:14
- それはCやHSPでもAPIや外部のDLLを使えば簡単にできるでしょう?

確かにそのとおりです、しかしH.O.H.の問題は解決できません。
192161:2009/10/10(土) 10:33:56
釣れた。
193デフォルトの名無しさん:2009/10/10(土) 10:41:35
>>164
ここ行って掲示板や、メールして話聞いてくるとか?
このテトリスは良い出来してる。
http://maruchu.nobody.jp/soft/
194デフォルトの名無しさん:2009/10/10(土) 11:52:37
>>193
※パソコン(゜Д゜)ぶっ壊れた
195デフォルトの名無しさん:2009/10/10(土) 11:58:54
>>194

おれも、壊れた・・・orz
196デフォルトの名無しさん:2009/10/10(土) 12:01:55
なになに>>193のゲームにウイルスでも仕込まれてんの?
197デフォルトの名無しさん:2009/10/10(土) 13:41:15
JAVAとかC++とか言われても、サッパリわからん
198デフォルトの名無しさん:2009/10/10(土) 13:43:06
別にいいんじゃね
199デフォルトの名無しさん:2009/10/10(土) 14:11:54
199
200デフォルトの名無しさん:2009/10/10(土) 14:12:35
200
201デフォルトの名無しさん:2009/10/10(土) 15:21:16
200++
202デフォルトの名無しさん:2009/10/10(土) 15:27:13
>>197
なぜここにいるの・・・?(´・ω・)
203デフォルトの名無しさん:2009/10/10(土) 15:55:15
(´・ω・)←使用禁止
204デフォルトの名無しさん:2009/10/10(土) 16:01:21
(´・ω:)
205デフォルトの名無しさん:2009/10/10(土) 18:15:10
(´・M・)
206デフォルトの名無しさん:2009/10/10(土) 20:44:52
(´・λ・)
207デフォルトの名無しさん:2009/10/10(土) 21:02:06
(´@u@)
208デフォルトの名無しさん:2009/10/10(土) 22:25:46
 顔         意味
(・V・)     (ははははは)
p(^−^)q  (ヒャ〜 おもしれ〜)
(>、<)   (応援ヨロシクっ!)
(M)     (マリオが大好きだよ)
(・○・)    (鼻がカユイ)
(^U^)    (だーい満足)
(^板違い^) (板違いですよ〜)
(==)    (最近ゲームつまんないですね)
(l l)     (悲しいよ〜)
(・w・)    (パズルゲームが好きです)
(’’)     (カービィが大好き)

  使用例
>>○○
そうですね。(==)
でもマリオなんてどうでしょう?(M)
僕は満足でしたよ。(^U^)
あ、なんか鼻がむずむずしてきた。(・○・)
すみません。
(・V・)


みんなどんどん使ってくださいねー。(>、<)
209デフォルトの名無しさん:2009/10/10(土) 22:28:19
(´・ω・)
210デフォルトの名無しさん:2009/10/10(土) 22:31:57
(´ ・    ω    ・ )
211デフォルトの名無しさん:2009/10/10(土) 22:51:30
int main(){bool static const ω=true;for

(;ω;)

;}
212デフォルトの名無しさん:2009/10/11(日) 00:07:10
int main(void) { while

( "ω" )

;}
213デフォルトの名無しさん:2009/10/11(日) 03:12:57
(+C_+ )
214デフォルトの名無しさん:2009/10/11(日) 10:29:45
c++でjavaみたいにローカルスコープでスレッドオブジェクトを作成して
走らすみたいなことってできますか?
スレッドプールを使うしかないような気がするのですが詳しい方教えて。
215デフォルトの名無しさん:2009/10/11(日) 10:44:13
boost::threadを使えばすぐできる。
でなければ、begen_threadexを使ってthreadクラスを作る。
216214:2009/10/11(日) 11:11:57
boost::threadならjoinしてdeleteする必要があるのでは?
ローカルスコープでnewして放置はc++ではできないですよね。
すると上位スコープにboost::threadオブジェクトのポインタをshared_ptr等で持っておく必要になるかと。
そうなると次回に同じローカルスコープでboost::threadがnewされたときに前回のオブジェクトをjoinして待たねばならない?
join後に新規オブジェクトとswapするような実装だと、ちょっと違うかなと思うのですが。
217デフォルトの名無しさん:2009/10/11(日) 11:45:42
listとか
218214:2009/10/11(日) 11:49:55
listで保持するくらいなら、ある程度の容量でスレッドプールを作りますよね。
219デフォルトの名無しさん:2009/10/11(日) 12:26:46
boost::thread_groupを使えばスレッド終了時にthreadクラスのインスタンスを削除してくれるね。

newして放置というのは、C++では好ましくないと思うよ。

220214:2009/10/11(日) 13:13:40
thread_groupは抱えているスレッドが終了したからといって削除はしないでしょ?
それをやるとしたらthread_groupは内部で監視用のスレッドを立てているか抱えるthreadとsignal/slotで接続されているかだと思う。
さっきから初心者と思われる人がレスしてくれているけど・・・。
221デフォルトの名無しさん:2009/10/11(日) 13:15:49
- 結果としてBASICが根幹にあるんですね。
  どうしてでしょうか。

簡単で手軽、誰にでも学習の機会があることでしょうね。
CやHSPだとこうはいきません。

CやHSPだとAPIのノウハウが必要になりますし、それは大きな障壁となります。
222デフォルトの名無しさん:2009/10/11(日) 13:22:29
>>221
DarkBASIC厨うざい
こんな所にまで誤爆すんな
223デフォルトの名無しさん:2009/10/11(日) 13:23:14
- それはCやHSPでもAPIや外部のDLLを使えば簡単にできるでしょう?

確かにそのとおりです、しかしH.O.H.の問題は解決できません。
224デフォルトの名無しさん:2009/10/11(日) 13:31:24
>>220
じゃあ、ためしてみれ
225214:2009/10/11(日) 14:15:02
やっぱりthread_groupのサイズは抱えているスレッドが終了しても変わんないよ。
何で試さなきゃいけなかったのw?
226デフォルトの名無しさん:2009/10/11(日) 14:31:44
detachしたいのかな?
227デフォルトの名無しさん:2009/10/11(日) 14:55:32
newせず自動変数でboost::thread作ったらだめなの?
boost::threadのデストラクタはdetachするだけで、実行中のスレッドが強制的に終了させられることはないよ。

それが嫌なら、boost::this_thread::at_thread_exitでも使ってスレッド終了時にdeleteするようにするのはどう?
228デフォルトの名無しさん:2009/10/11(日) 14:56:24
void f() {}
...
{ // local scope
boost::thread(f).join();
}

newなんてどこから出てきた?
229デフォルトの名無しさん:2009/10/11(日) 15:16:49
newならうちの裏山にいっぱい生えているよ
230デフォルトの名無しさん:2009/10/11(日) 15:34:22
>>228
ようするに214は、そこでjoinしたくないだけだと思う。

newは216で初出。まさかとは思うけど、Javaとか言っているし、
クラスオブジェクトを自動変数にできることを知らない可能性があると感じた。
231デフォルトの名無しさん:2009/10/11(日) 16:48:32
前スレにいたヒープとスタックの区別がついてない人かな?
232デフォルトの名無しさん:2009/10/11(日) 16:59:00
今、プログラムを勉強してます。
スレをざっと読んで、C++がプログラミング言語だということは理解できました。
JAVAもプログラミング言語でしょうか、それともダイレクトXのようなアプリケーションなのでしょうか?
233デフォルトの名無しさん:2009/10/11(日) 17:03:24
なんというツッコみどころの山
234デフォルトの名無しさん:2009/10/11(日) 17:06:13
>>232
スレ違いです。その質問は以下へどうぞ。

スレ立てるまでもない質問はここで 101匹目
http://pc12.2ch.net/test/read.cgi/tech/1254843018/
235デフォルトの名無しさん:2009/10/11(日) 18:53:50
thread_groupのサイズってなんだ?
236デフォルトの名無しさん:2009/10/11(日) 19:28:48
Javaしか出来ない馬鹿を相手にしちゃ駄目よ
237デフォルトの名無しさん:2009/10/11(日) 19:34:36
boost::threadのドキュメント嫁
238デフォルトの名無しさん:2009/10/11(日) 19:41:47
うんうん、こいつはちょっと前にもいたJa馬鹿に違いあるまい。
239デフォルトの名無しさん:2009/10/11(日) 20:46:11
Java房ほんとうぜーな
>さっきから初心者と思われる人がレスしてくれているけど・・・。
>何で試さなきゃいけなかったのw?
人に聞く態度じゃねーだろw
どっちが初心者だよ(;´Д`)
240デフォルトの名無しさん:2009/10/11(日) 21:09:17
約15年C++一筋だったけどもうC#に乗り換えるわ
C++/CLIを使い続けることに疑問を感じてしまった
241デフォルトの名無しさん:2009/10/11(日) 21:13:33
はいはい次の患者さんどうぞ。
242デフォルトの名無しさん:2009/10/11(日) 21:14:16
C++/CLIなんて使わないというか
乗り換えるとか言ってる奴は同時に使える言語が一個しかないの?
243デフォルトの名無しさん:2009/10/11(日) 21:17:15
C++のつもりでC#のジェネリックスを使おうとするとかなりダメージ受けるよな。

T min<T>(T lhs,T,rhs)が作れねえorz
typedefがねえorz
244デフォルトの名無しさん:2009/10/11(日) 21:20:49
C#って
typedef std::vector< A > A_collection;
が出来ないだっけ?
だとしたら致命的だったりする。
245デフォルトの名無しさん:2009/10/11(日) 21:23:48
usingでそれっぽくはできる
246デフォルトの名無しさん:2009/10/11(日) 21:24:53
そうなのか。
C++03にtypedefテンプレートがない事にさえ相当苛ついてるのに
C#に移行したら発狂するな。
早く0xに開発環境移行したいよー。
247デフォルトの名無しさん:2009/10/11(日) 21:26:35
>>244
そうできないんだ。typedefがないからA_Collection::value_typeのようなこともできないんで、Aを明示しないといけない。

かなり苦戦する。
248デフォルトの名無しさん:2009/10/11(日) 21:32:36
template慣れるとほかの言語でしんどいよねー
249デフォルトの名無しさん:2009/10/11(日) 21:51:22
> 同時に使える言語が一個しかないの?

手広くやってる余裕あるか? ふつー

自らのポテンシャルの限界を晒すようでアレだが
歴史上の各時点では1言語だけ突出してて他は教養程度にならざるを得ない
250デフォルトの名無しさん:2009/10/11(日) 21:56:31
ひとつの言語しか知らなかったら解決方法が狭まるからね。

解決のヒントを多く持っておくのは悪いことではないよ。
251デフォルトの名無しさん:2009/10/11(日) 22:13:00
C++の限界だと思ってたけど単に昔の自分の限界でした、ってことはよくある
252デフォルトの名無しさん:2009/10/11(日) 22:14:37
真逆だろC++はやろうと思えば何でも出来る
そこが最大の欠点
253デフォルトの名無しさん:2009/10/11(日) 22:38:13
一つの言語を知っているのなら、他の言語を学ぶコストはかなり安くなるから
費用対効果の観点からも勉強する価値はあるよ。

まあ、Javaとか触りたくないというのは理解できるが。AndroidでC++ only開発できないかなぁ
254デフォルトの名無しさん:2009/10/11(日) 22:42:37
LINQが出てからC#をやる気になった。
クエリ式はどうでもいいが、Enumerable拡張メソッドはSTLアルゴリズムに通じるものがある。
255デフォルトの名無しさん:2009/10/11(日) 22:50:44
勉強くらいならもちろんしてるさ
だからって書いてるコードの量の桁が簡単には変わらない
256デフォルトの名無しさん:2009/10/11(日) 22:58:48
C#で楽しようぜw
257デフォルトの名無しさん:2009/10/11(日) 22:59:18
LINQのような異なる文法の構文を持ち込むのはどうなんだろうな。
258デフォルトの名無しさん:2009/10/11(日) 23:01:05
ゲーム書くために勉強してるからC++メインだけど
レポートを始末するために各種言語は軽く触ったな
C++はちょっとした作業をしたいときに大掛かり過ぎる
259デフォルトの名無しさん:2009/10/11(日) 23:04:15
>>258
それが>>252の言うところだな
260デフォルトの名無しさん:2009/10/11(日) 23:06:16
>>255
ならいいんじゃね
C++以外知らないとか学ぶ気すら無いとかじゃないんだし

俺も使うのはダントツにC++が多い
あとはC++を生成するプログラムとか
設定ファイルの文法(最近はXMLが多いけど)とかの
こまごました作業にPerlやLISPを使うくらい
261デフォルトの名無しさん:2009/10/11(日) 23:06:45
大がかりなプロジェクトにはC++のような汎用性の高い言語が向いてる
簡単なプログラム作るなら組み込みがしっかりしてるjavaとかの方が向いてるって事でおk?
262デフォルトの名無しさん:2009/10/11(日) 23:09:38
いや、ガチはC++、小物は徹底的に手抜きできるPerlって感じでやってる
Perlは他の似たようなのでもいいと思う(つーかあの辺は何個も覚える必要は感じないし)
263デフォルトの名無しさん:2009/10/11(日) 23:11:40
そうかなー?
ごく簡単なプログラムの為にインタプリタやら
VMをセットアップするほうが面倒に感じるよ。
264デフォルトの名無しさん:2009/10/11(日) 23:17:14
>>257
アレはC++でのboost.spiritみたいなもんじゃね
265デフォルトの名無しさん:2009/10/11(日) 23:27:57
spiritはあれでもC++の文法に沿ってるし。
266デフォルトの名無しさん:2009/10/12(月) 00:10:24
わざわざPerlとかの実行環境のセットアップするくらいならC++で書くなぁ
一度やろうとしたらすっっっっげえ面倒臭くてかえって時間かかって失敗した
267デフォルトの名無しさん:2009/10/12(月) 00:14:06
>>252はもしかして>>251に対するレスのつもりなのかな
268デフォルトの名無しさん:2009/10/12(月) 00:17:10
わざわざC++とかの開発環境セットアップするくらいならHSPで書くなぁ
269デフォルトの名無しさん:2009/10/12(月) 00:20:59
LinuxとかならPerl,Pythonでいいんだろうけどね
大体のディストリには最初から入ってるし

WindowsでPerlとか使おうとは思わん
270デフォルトの名無しさん:2009/10/12(月) 00:24:30
C++の開発環境って、エディタ、gcc、make等がインストールされてたらすぐ使えるじゃん。
OSのインストール時にインストール済の場合も多いし。
271デフォルトの名無しさん:2009/10/12(月) 00:26:39
>>270
configure.ac と Makefile.am 書くのがめんどくさいだろ常考。
272デフォルトの名無しさん:2009/10/12(月) 00:30:04
Windowsでも簡単にActivePerlインストールできるし,
問題無く動くからPerlで済ませちゃってるなぁ。
273デフォルトの名無しさん:2009/10/12(月) 00:43:05
PerlやRubyは挫折したなあ。結局、プログラム完成させる前にC++に書き直したもんなあ。
274デフォルトの名無しさん:2009/10/12(月) 00:51:14
>>271
Makefile.amはまあ仕方ないとして、他はAutotoolsですぐじゃん。

275デフォルトの名無しさん:2009/10/12(月) 00:53:04
つうか、簡単な捨てプログラムなら別にmakeがなくてもいいし。
276デフォルトの名無しさん:2009/10/12(月) 01:06:48
こういう開発環境談義を聞くたび思うんだけど
そういうの全てひっくるめて
元々考えなくていいなら、それに越したことないよねえ。
環境作る立場の人は、それが仕事だったり趣味だったりするから
絶対考えてないよね。
277デフォルトの名無しさん:2009/10/12(月) 01:16:53
ActivePerlをポンと入れる程度でも「環境作りを考えてない」ってなるなら、もう
OS組み込みにしてもらうしか無いと思うが…
さすがにそのレベルだとプログラミングなんかやるもんじゃないと思う
278デフォルトの名無しさん:2009/10/12(月) 01:33:56
初歩的かもしれないのですが疑問というか謎なので

static int test = 1;
for(int i=0;i<test;i++){
}
これだと定数ではないのでダメなんだろうけど
(const int test = 1にすると動いたので)
でも
static int test = rand() % 1 + 1;
にすると動くのはなぜ?
279デフォルトの名無しさん:2009/10/12(月) 01:48:08
static int test = 1;
for(int i=0;i<test;i++){
}
でも動くでしょ。
280デフォルトの名無しさん:2009/10/12(月) 01:48:16
>>278
それは本当にダメだったのか?
エラーメッセージは?
281デフォルトの名無しさん:2009/10/12(月) 02:01:22
>>279-280
動かないですねぇフリーズします。
でもこのやり方でブレークポイントで止めて数値を見ると0x01' 'って
数字の横に変な文字化けみたいなのが出てるんですが…
282デフォルトの名無しさん:2009/10/12(月) 02:09:41
>>281
多分、testに代入してる
283デフォルトの名無しさん:2009/10/12(月) 02:16:17
>>277
Unix系向けのオープンソースをWindowsで無理矢理動かしたり移植品使うと
大体ヘンテコなトラブル起きるし情報も少ないし対応も遅いしロクな事がないから嫌なんだ
いくらインスコが楽になってもそれは変わらない
284デフォルトの名無しさん:2009/10/12(月) 02:28:16
>>282
別のプログラムで確認するとどのやり方でも動きました。
つまり、このプログラムだけなぜかおかしな動きをするということっぽいです。
原因か対処方わかります?
285デフォルトの名無しさん:2009/10/12(月) 02:32:17
「このプログラム」って言われてもなぁ。

↓こっちのスレで聞いたほうがよくないか?
http://pc12.2ch.net/test/read.cgi/tech/1187922645/
286デフォルトの名無しさん:2009/10/12(月) 02:36:22
>>284
for文の中身が怪しい。少なくともソース書いてくれなきゃ誰もそれしか言えない。

>>283
ActivePerlはWindows専門のメンテナがやってるだけあって、かなりまともに動くよ。
ppmでモジュール自動インストールできたり、この手のモノの中ではかなり便利。
まあposix互換の問題とかはつきまとうけどさ。
287デフォルトの名無しさん:2009/10/12(月) 02:36:30
>>285
エスパーっぽいんですが、この部分に関係している部分はなさそうなんです。
というか今確認したんですが、
static int test = 1; for(int i=0;i<test;i++)
とすると今度はフリーズではなくて0x64が代入されてるんですが…
原因が全くわかりません
288デフォルトの名無しさん:2009/10/12(月) 02:38:30
static 変数が初期化されるのは初回のみだぞ
289デフォルトの名無しさん:2009/10/12(月) 02:40:33
>>288
他ではいじってないです
というより0x64'd'というdという意味不明な文字が出てます。
後for文の中はすべてコメントアウトにしてもなります
290デフォルトの名無しさん:2009/10/12(月) 02:41:33
フリーズってもしかしてエラーでて止まるって事か?
まあ、一番可能性が高いのはポインタの操作しくって変な所書きまくってるんだろな。
291デフォルトの名無しさん:2009/10/12(月) 02:41:42
ぐちゃぐちゃ言ってないで問題が再現する最小ソース作って貼れよ。
それがいやならエスパースレで祈れ。
292デフォルトの名無しさん:2009/10/12(月) 02:53:57
>>291
関数の中身ですが、問題のfor文以外全てコメントアウトと
for文の中身もコメントアウトしてもなります…
となると関数以外となりそうなのですが…原因を探してみます。。。
293デフォルトの名無しさん:2009/10/12(月) 04:27:43
staticを外すとどうなるんだ?
294デフォルトの名無しさん:2009/10/12(月) 10:38:28
C++のやりすぎて頭がおかしくなったんだろうな
おとなしくJavaかC#に乗り換えることをお勧めします
295デフォルトの名無しさん:2009/10/12(月) 10:43:58
static の意味がわかってないんじゃないかな。
296デフォルトの名無しさん:2009/10/12(月) 11:12:24
>>214は解決したの?
ほんとに自動変数を知らなかっただけ?
297デフォルトの名無しさん:2009/10/12(月) 12:04:56
>>278

#include <stdio.h>
int main(){
static int test = 1;
for(int i=0;i<test;i++){
printf("i = %d, test = %d\n", i, test);
}
return 0;
}

出力結果
i = 0, test = 1


全く問題無く動いたぞ。(VisualC++2008)
298デフォルトの名無しさん:2009/10/12(月) 12:20:39
しかしなんだってこんなに
回答者に対して自分の情報を提示しないことを
頑張って頑張って頑張り抜くんだろうな。
299デフォルトの名無しさん:2009/10/12(月) 12:37:57
まぁ最低限の情報に絞るのが2chのほとんどの場所で基本だからなぁ
または単純に恥ずかしいとかくだらない理由かもしれないが
300デフォルトの名無しさん:2009/10/12(月) 12:55:23
でもこいつが今回書いた日本語の合計より、
最小限のコードのほうが多分バイト数少ないだろうな・・・。
301214:2009/10/12(月) 13:21:51
>>230
いや、Javaは今勉強中で仕事はずっとC++。

>ようするに214は、そこでjoinしたくないだけだと思う。
そう。joinしたら別スレッドでやる意味ないしね。
newせずスタックに作るとスコープを抜けるときにjoinすることになるよね。
伝わってないのかも知れないけどthreadをnewするのは非同期な関数の中でというのを想定してる。
予断だけどQtにグローバルなスレッドプールオブジェクトがあるね。

スレ違いだけどJavaでnewしたThreadはスレッドの停止後にGCがThreadを開放してくれるのかな?
Javaのサンプルには良く載ってるけど。

>>239
Java厨でないって。人に聞く態度じゃないけど聞いてもない人が得意顔でレスしてるからついね。
302デフォルトの名無しさん:2009/10/12(月) 13:28:14
>>300
だが、この質問者を見てると、最小限のコードを切り分けるのは無理そうではなかろうか
303デフォルトの名無しさん:2009/10/12(月) 13:42:13
>>301
別に俺は回答する知識はないんで、関係ないんだけど
いまいち欲しいものがわからない。
処理が終了したら、自動で消滅するself deleteを持つスレッドが欲しいの?

>threadをnewするのは非同期な関数の中でというのを想定してる。
これもわからない・・
ローカルスコープのスレッドオブジェクトを、非同期な別の関数によって生成する?
なわけないよなあ。
304デフォルトの名無しさん:2009/10/12(月) 13:44:57
正直C++をマンセーしている奴ってC++しか使えなくて時代に取り残された奴なんだろ?
C++とC#の両方を使いこなせている奴ならC++を崇拝する道理が無い
305デフォルトの名無しさん:2009/10/12(月) 13:48:30
C++が使いこなせてないのがよくわかるレスですね
306デフォルトの名無しさん:2009/10/12(月) 13:58:25
欲しい情報だけ手に入れたいならなぜ匿名掲示板を利用してるんだろう?
知ってる人に直接聞けばいいのに
307デフォルトの名無しさん:2009/10/12(月) 14:05:12
欲しい情報だけ、最小の労力で手に入れたいから
匿名掲示板を使うんだろ。
このシステムは合理的でとても良いと思うんだけど、
残念なことに、使う人間がバカ過ぎてまともに機能しない。
308214:2009/10/12(月) 14:14:25
>>303
いや、こっちも大した知識はないよ。
Javaのサンプルを参考に話してたからself deleteするものが理想だということかな。

>これもわからない・・
ボタン押下されたときにイベントハンドラから別スレッド起動して、それに重い処理(画像の加工)を任せて
待機なしでイベントループに戻るとかの良くあるやつを言ってたけど伝わってなかった?
JavaのサンプルだとハンドラでThreadをnewして放置じゃなかったかと思う。
C++の場合、みんなどんな風にやってるのかなと思って聞いてる。
下手すると(前述のlistを使うなど)ボタン押される度にスレッドオブジェクトが増加するでしょ?

>>304が言ってるC#の、BeginInvokeのようなものがあると良いなという話。
今ちょうどC#の解説ページを見ていて思った。
309デフォルトの名無しさん:2009/10/12(月) 14:24:53
知ったかぶってただけか
専門用語一杯知ってる俺カコイイ!みたいな
310214:2009/10/12(月) 14:26:27
そんなつもりじゃないんだけどもね。
そう聞こえたらごめんなw。
311デフォルトの名無しさん:2009/10/12(月) 14:28:26
>>308
それで、>>230の言う>>228のjoinなし
{ // local scope
boost::thread(f);
}
だと何か問題あるの?
312デフォルトの名無しさん:2009/10/12(月) 14:28:38
自分の目の前の人間を「俺カコイイと思ってる奴」だと思い込みたい子は
どこにでもいるよ。
それ自体が「そういうのを鋭く見破って言葉にする俺カコイイ」だったりするんだけど。
313214:2009/10/12(月) 14:32:51
BeginInvokeってスレッドプール使ってるんだよね。結局それかと。
以前に自分でこさえたときはやっぱりスレッドプール使った。
そんときboost::thread_groupも見たので>>219が適当にトンデモなこと言ってるなと思ったしlistがどうとかもね・・・。
苦笑するしかなかった訳。
314デフォルトの名無しさん:2009/10/12(月) 14:34:01
まぁ、C++のインスタンスと記憶領域の実装面がすっぽり抜けてるJava脳の人に
さんざんめんどくせぇ思いをしてるせいで、Javaがどうこう言いながらnewが
どうたら言われると、またその類なんじゃねーのかっていう気持ちになっちゃって
まともに読む気になれないのはある
315デフォルトの名無しさん:2009/10/12(月) 14:37:14
>>313
スレ違いだが、C#のデリゲートのBeginInvokeは例外を捕捉するためなどの理由から、
あとでEndInvokeを呼ばないといけないので、C++でdeleteから逃れられないのとそう変わらない状況だよ。
316デフォルトの名無しさん:2009/10/12(月) 14:40:21
>>311
{ // local scope
boost::thread th(f);
}

の書き間違いだと思って話すけどfが完了する前にスコープ抜けてthが消えるとどうなるの?
というか、ほぼ100%そうなるだろうけど。

後、基本的にth.join()はした方が良いんでない?
317デフォルトの名無しさん:2009/10/12(月) 14:42:57
いや投げっぱなしジャーマンが希望らしいよ
318デフォルトの名無しさん:2009/10/12(月) 14:43:34
>>308
>>214の内容で伝わるわけないだろう…
「ローカルスコープ」という単語の使い方が間違ってるからみんな混乱したんだぜ。
最初に「イベントハンドラでスレッドを生成したい」と言っていれば
こんなに責められたりしてないよ。
319214:2009/10/12(月) 14:46:24
「ローカルスコープ」って使い方間違ってたのか。

関数 {
{
}
}
320214:2009/10/12(月) 14:47:30
変なとこで送信してしまったw。

「ローカルスコープ」って使い方間違ってたのか。

関数 {
  {
    // このスコープってなんていうの?
  }
}
321デフォルトの名無しさん:2009/10/12(月) 14:50:51
そこはローカルスコープだが問題はそこじゃねえw
322デフォルトの名無しさん:2009/10/12(月) 14:51:17
スレッドのラッパクラス作って、newしっぱなしにして、消えたい時に自分で勝手に
delete thisすりゃいいだけなんでないの?
323デフォルトの名無しさん:2009/10/12(月) 14:54:54
>>316
>>227で既出。実行中のスレッドが止まることはない。
http://www.boost.org/doc/libs/1_40_0/doc/html/thread/thread_management.html#thread.thread_management.thread.destructor

これが気持ち悪い、または問題があるなら>>322方式でしょ。
324デフォルトの名無しさん:2009/10/12(月) 15:19:27
>>323
でもdelete thisするとして実装はどうするの?
Windowなんかはcloseされたときにやれば良いけどね。

struct actor {
  ~actor() { th_.join(); }
  void run() {
    ... // メインの処理

    // 後処理
    delete this;
  }
  thread th_;
};

だとrunを抜けてないときにdelete thisだと~actorのjoin()で無限に待機しそう。
325デフォルトの名無しさん:2009/10/12(月) 15:26:54
何でデストラクタでjoinすんだろ
326デフォルトの名無しさん:2009/10/12(月) 15:31:17
じゃあどこでjoinする?
joinは必須だと思うけど。
runの中でjoinするの?
327デフォルトの名無しさん:2009/10/12(月) 15:48:37
joinが何のために存在するのかわかってない気がする
328デフォルトの名無しさん:2009/10/12(月) 15:54:52
joinは必須ではないぞ。
特に今の例みたいな処理を投げっぱなしにする場合なんか使いようがない。
それに最後にjoin必須ならC++的にはとっくにデストラクタでjoinする仕様になるだろjk。
329デフォルトの名無しさん:2009/10/12(月) 15:55:26
joinってwin32APIだとWaitForSingleObjectじゃない?
でthread::~threadでCloseHandleするのだと思ってたけど。
330デフォルトの名無しさん:2009/10/12(月) 16:13:05
ものすごく色々誤解してる気がしまくってならない
331デフォルトの名無しさん:2009/10/12(月) 16:22:10
どうも、スレッドが終了するまで呼び出し側はスレッドオブジェクトを破棄できないって考えに支配されてる気がするんだが
332デフォルトの名無しさん:2009/10/12(月) 16:31:54
スレッドのデタッチとjoinについて完全に理解が間違ってた。
デタッチするとスレッド終了時にスレッドのスタックが開放されることが保障されるんだね。
mainが終了するまでにサブスレッドが終了してなくても問題ないの?
333デフォルトの名無しさん:2009/10/12(月) 16:36:10
Javaのやりすぎで頭がおかしくなったのかと思った
334デフォルトの名無しさん:2009/10/12(月) 16:51:05
ICUいれたのにこれがコンパイル出来ないです。
どうしたら出来るようになるでしょうか?

http://d.hatena.ne.jp/rayfill/20090304
335デフォルトの名無しさん:2009/10/12(月) 18:39:08
>>256
Linux&gccで動くようになったら考えてやってもいい
336デフォルトの名無しさん:2009/10/12(月) 18:40:59
小物はPython
それ以外はPython&C++
全部C++で作ることはなくなった
337デフォルトの名無しさん:2009/10/12(月) 18:58:40
>>336
小物って例えばどんなプログラム?
文字列とかファイル操作とか?
338デフォルトの名無しさん:2009/10/12(月) 20:57:08
自分は逆だな
基本的にはどんなアプリでもC#で作って
どうしてもC++でないと実現出来ないorそうすることで効率がよくなる機能だけを
C++で小さな部品として作る感じだな
もしくはクライアントの環境がC#NGな場合のみ渋々C++で作る感じ
339デフォルトの名無しさん:2009/10/12(月) 21:10:58
C#なんでLinuxに移植されないんだろうね
使う人増えたほうがM$もうれしいんじゃないのか?
340デフォルトの名無しさん:2009/10/12(月) 21:12:30
つ MONO
341デフォルトの名無しさん:2009/10/12(月) 21:20:28
M$が最初に.NET構想を立ち上げた頃の時代では
OSを支配することが世界を支配することを意味していたけど
今ではそうでは無くなったから情熱が消え失せたんだろう
M$CEOのバルマーも「M$がGoogleになれなかった」ことが「人生最大の失敗」だったって言っているしな
342デフォルトの名無しさん:2009/10/12(月) 21:23:40
C#のC++に対するアドバンテージなんかあるんすかね。スレ違いならご容赦。
343デフォルトの名無しさん:2009/10/12(月) 21:29:52
作り手の視点で見れば楽だわなC#は。
クライアントには受けが悪いが。
344デフォルトの名無しさん:2009/10/12(月) 21:35:28
>>342
C#はC++に比べて標準のライブラリが充実しているのは大きい。C++は開発効率が採用から軌道に乗るまでが大変。

GCがあるのは一見楽なようだけど、リソース破棄があいまいになっていろいろ落とし穴がある。
shared_ptrが正式に仕様入りしたらC++のリソース管理はC#と大差なくなるな。
345デフォルトの名無しさん:2009/10/12(月) 21:39:07
Vistaには.NET3.0がプリインスコされているから
C#アプリは何もしないで動くけど
C++アプリはC++ Redistributable Packageをクライアントに入れてもらわないと動かないからな
どっちがクライアント受けが悪いかは明白だな
346デフォルトの名無しさん:2009/10/12(月) 21:41:23
わざとらしい
347デフォルトの名無しさん:2009/10/12(月) 21:56:55
>>344
Boostのshared_ptrは今のままでも十分現役バリバリで使えると思うし、使ってるけど、
何か問題あるのかな。
348デフォルトの名無しさん:2009/10/12(月) 21:57:46
つうか、shared_ptrなしでまともな開発はできないと思うんだが。
349デフォルトの名無しさん:2009/10/12(月) 22:03:55
shared_ptrとか信用ならん。
いくつも似たようなのがあって良くわからん。
関数内で使用した物はいつも破棄するか、staticか、グローバルで良いだろ。
この三通りの方法で困る場合ってどんなのがあるんだよ?

350デフォルトの名無しさん:2009/10/12(月) 22:07:18
vectorとかに入れるときかな
351デフォルトの名無しさん:2009/10/12(月) 22:09:13
shared_ptrが信用なら無かったら生ptrなんてもっとやばいだろ
352デフォルトの名無しさん:2009/10/12(月) 22:12:51
>shared_ptrとか信用ならん。
>いくつも似たようなのがあって良くわからん。
そりゃお前が分かろうとしてないだけだ…

オブジェクトのライフタイムが明確でない場合なんていくらでもあるだろう。
そんなときstatic変数で全部保持して、使用側にCloseHogeとか呼んでもらったりするワケ?
353デフォルトの名無しさん:2009/10/12(月) 22:14:52
>>350
vector<char*>とか? 関数内で破棄しなくても、これならいつでも破棄できるが。
354デフォルトの名無しさん:2009/10/12(月) 22:17:48
>>347-348
俺はもちろんshared_ptr依存症だけど、boostはあくまでも外部ライブラリなんで、導入に渋る人がいるし。
shared_ptrが標準に入れば(年内は無理そうだけど)何処でも気兼ねなく使えるってこと。
355デフォルトの名無しさん:2009/10/12(月) 22:20:03
何かソフトウェア開発の基礎が分かっていないな
車の製造工場からネジが1本付け忘れられた車が出荷されないのは
従業員の能力が高いからじゃないんだぞ?
356デフォルトの名無しさん:2009/10/12(月) 22:20:42
>>354
了解。まあ、そんなふうに渋る人はC++のことをこれっぽっちも理解していない、
理解する気もない奴なんだろうな。
357デフォルトの名無しさん:2009/10/12(月) 22:21:36
>>349
>いつも破棄するが。
当然shared_ptrはそれを間違いなく実行してくれる。100万のnewがあって間違いなく100万のdeleteを人手で書くことができるかってことだ。
>staticとがグローバルとか
そんな使い方はよせ。
358デフォルトの名無しさん:2009/10/12(月) 22:21:47
GCするならC#つかえばいいじゃん。
359デフォルトの名無しさん:2009/10/12(月) 22:23:08
>>349
ポリモーフィズムを使用するときは、値でなくポインタを使わなければならない。

スマートポインタは確かに何種類かあるが、それらの一つ一つの違いを理解できない
なら、C++は止めたほうがいいよ。
360デフォルトの名無しさん:2009/10/12(月) 22:23:26
必要ないと思う人にとっては必要無いんだろうけど、
俺にはshared_ptrみたいなRAII無しに
例外安全なコードを書ける気がしないなあ
361デフォルトの名無しさん:2009/10/12(月) 22:24:34
> 100万のnewがあって間違いなく100万のdelete

これだったらauto変数やSTLで出来るんだが。
オーバーヘッドは、汎用性のあるhared_ptrより小さいだろう。
362デフォルトの名無しさん:2009/10/12(月) 22:25:29
>>358
GCとスマートポインタは全く別概念。スマートポインタはオブジェクトの破棄時に
deleteしてくれるから、newされたオブジェクトの破棄時をコントロールできる。
GCはできない。リソースはファイル、ソケット、スレッド等、メモリだけではないので、
GCだけでは不備。
363デフォルトの名無しさん:2009/10/12(月) 22:31:56
>>361
autoがdeleteしてくれるの?
STLがdeleteしてくれるの?
364デフォルトの名無しさん:2009/10/12(月) 22:33:19
ここ読んどけ。



shared_ptrの構築・破棄におけるパフォーマンス測定
http://www.cycleof5th.com/tips/index.php?date=2009-02-26

パフォーマンス測定では、RdTscを使って平均的なクロック数を測定する。
測定は、Windows XP/Core 2 DuoのPCで行った。
shared_ptrに付け加え、自動変数・new/delete・auto_ptr・CAutoPtr・vector<shared_ptr>・CAutoPtrArrayについて
CStringのオブジェクトの構築・破棄に対して調査した。

一つのオブジェクトの構築・破棄
自動変数として使用する場合と比べ、shared_ptrの構築・破棄に10倍以上のクロック数がかかっている。
また、CAutoPtrやauto_ptrに比べ2.3倍のクロック数がかかっていることがわかる。

複数のオブジェクトの構築・破棄
CAutoPtrArrayと比べvetor<shared_ptr>の構築・破棄に約3倍のクロック数がかかっていることがわかる。
結果としては、何度も構築・破棄するようなオブジェクトは自動変数で割り当てるのがもっとも速度が早いことがわかる。
365デフォルトの名無しさん:2009/10/12(月) 22:35:24
>>363
aruclass *A = new aruclass; → aruclass A;

char *p= new char [100]; → string p(100,'\0');

でOK
366デフォルトの名無しさん:2009/10/12(月) 22:39:37
shared_ptrの目標は標準として安全なスマートポインタを提供することであって、速度は重視していない
もっともshared_ptrのオーバーヘッドが問題になるような使い方をしているかは知ったこっちゃないが
次期標準にはunique_ptrっていう原理的にはゼロオーバーヘッドなスマートポインタも入るんだぜ

自動変数で十分って言ってる人は、C++でOOPをしたことがないのが明らか
自動変数だけでどうやってファクトリ書くんだ?
367デフォルトの名無しさん:2009/10/12(月) 22:40:09
autoってそっちのautoか。
368デフォルトの名無しさん:2009/10/12(月) 22:40:11
自動変数で済むところでnewする奴なんて居る?
369デフォルトの名無しさん:2009/10/12(月) 22:45:49
>>364
仮に10倍以上のクロックがかかっても(実際にはauto_ptrと比較するべきなので数倍)、
それはアプリケーション自体の実行時間のいったい何%かが問題。はっきりいって誤差レベル。

newやdeleteの実行時間に比べればわずかなものではないかな。
370デフォルトの名無しさん:2009/10/12(月) 22:49:03
ちょっとお聞きしたいのですが、
C++にてGUIを作成することは可能でしょうか
目的は簡単なタブ選択から、あるテキストファイルに書式通りに出力することなのですが。。
linux環境で使えるものを作る必要があり、なにかないかと探しているところです。
すいませんがよろしくお願いいたします
371デフォルトの名無しさん:2009/10/12(月) 22:49:05
思っていたよりshared_ptr速いな
372デフォルトの名無しさん:2009/10/12(月) 22:49:52
不必要な場面でとりあえず付けとくてきな使用はまずいって事だ。
373デフォルトの名無しさん:2009/10/12(月) 22:51:03
マルチプラットフォームのGUIライブラリ使えよ。
Qtとかfirefoxが使ってるのとか。
374デフォルトの名無しさん:2009/10/12(月) 22:51:17
>>370
QtやwxWidgetsのスレを見ると作れるようになります。
375デフォルトの名無しさん:2009/10/12(月) 22:54:21
性能のみを優先して汎用性を否定している人ってクラスを設計するときに
A関数を呼ぶ前にB関数を必ず呼ぶ必要があるっていうルールを平気で作っちゃう人なんだろうな
376デフォルトの名無しさん:2009/10/12(月) 22:54:56
>>371
アトミック操作がある割には速いと思うよ。
377デフォルトの名無しさん:2009/10/12(月) 22:55:55
>>364
そこんところの速度が気になるなら、メモリプールくらい使うでしょ普通。
vectorだって、reserve()とかするだろうしさ。
378デフォルトの名無しさん:2009/10/12(月) 22:56:30
>>368
実体メンバで済むのをコンストラクタで new する奴なら腐るほどいるが根は同じだな
C でも固定でいい配列をいちいち malloc するガイキチいるし
379デフォルトの名無しさん:2009/10/12(月) 22:59:24
将来的にスタックに置けなくなことを考慮してヒープに置いているとか?
380デフォルトの名無しさん:2009/10/12(月) 23:00:44
private 完全隠蔽のために new 必須になってるクラスはいっぱいある。
pimpl とかインターフェースクラス継承とか。
381214:2009/10/12(月) 23:02:43
今度は誰も答えてくれなくなったのでもう一度書くけど、
mainが終了するまでにサブスレッドが終了してなくても問題ないの?
382デフォルトの名無しさん:2009/10/12(月) 23:07:49
はい、問題はないです。
383デフォルトの名無しさん:2009/10/12(月) 23:07:52
shared_ptrを使うのは使う必要があるからであって、自動変数でいいのなら、
shared_ptrなど使う必要もない。auto_ptrもshared_ptrとは使用する場面が違う。
それなのにパフォーマンスの計測結果を出されても意味がないと思う。
384デフォルトの名無しさん:2009/10/12(月) 23:10:03
>>381
君は人に訊かなくても大丈夫だから一人で頑張りなよ。
385デフォルトの名無しさん:2009/10/12(月) 23:10:17
場合によるだろ

つーかぶっちゃけお前がどういう構造の中でどこでワーカー走らせてどこでどう
終わらせたいのかわかんね
386デフォルトの名無しさん:2009/10/12(月) 23:13:06
>>380
つうかprivateの完全隠蔽とかそんな気にするもんなのかな?
どうせtemplate使うとそんなのできないんだし気にしてもしゃーないと思うんだが
もちろんヘッダ依存やクラスサイズが気になる場合はpimpl使うこともあるけど徹底するほどでもないと思う
387デフォルトの名無しさん:2009/10/12(月) 23:13:32
>>383
不要に使うのは損というのが判明する。とりあえず付けとくとパフォーマンスが悪い。
388デフォルトの名無しさん:2009/10/12(月) 23:14:03
どうしてこうも情報削りすぎの相談が多いんだかなぁ…
389デフォルトの名無しさん:2009/10/12(月) 23:15:31
つーかshared_ptrの速度が気になるようなボトルネックならpimpl捨てるだけの話だろ
390デフォルトの名無しさん:2009/10/12(月) 23:15:51
>>387
それは自明だと思っていたが、世の中にはそうではない人もいる、だから、計測結果を
出すことにも意味はあるということは分かった。ありがとう。
391デフォルトの名無しさん:2009/10/12(月) 23:18:54
「宿屋に泊まると、体力が回復しますぞ!」
って教えてくれるドラクエの町人程度には有意義だ。
392デフォルトの名無しさん:2009/10/12(月) 23:19:40
C++崇拝者はスピード狂が多いからな
JavaやC#の処理速度に対するアドバンテージが唯一のアイデンティティとして染みついているんだろう
393デフォルトの名無しさん:2009/10/12(月) 23:20:08
・メモリ以外のリソースを安全に確保開放したいとき
・例外安全を保ちたいとき
・単純に参照構造が複雑で管理がめんどくさいとき
・コンテナに入れるとき
・返り値でnewして返すとき

↑このへんはsmart_ptrで後は生ポインタかな
394214:2009/10/12(月) 23:21:26
なんかthreadはjoinが必須でないみたいなことになってるので一言。

joinしなくてもスレッドのスタックは開放されるけど、サブスレッドが終了する前に
メインスレッドが終了した場合はサブスレッドのスタックに積まれたオブジェクトは
デストラクタが呼ばれないよ。それが何を意味するかはご存知だろう。

つまり基本的にboost::threadはjoinすべき。
スレッドプールを利用した方が良いってこったね。
スレッドプールは最後に必ずthreadをjoinできるからね。
395デフォルトの名無しさん:2009/10/12(月) 23:23:11
は? detachすればいいんちゃうの。
396214:2009/10/12(月) 23:23:15
>>381
他人になりすますなってのw。
397デフォルトの名無しさん:2009/10/12(月) 23:24:12
なんか久しぶりに香ばしいのが来てるな
398デフォルトの名無しさん:2009/10/12(月) 23:25:02
ここまでくると失笑もんだな
399デフォルトの名無しさん:2009/10/12(月) 23:30:02
スマポがあれば生ポインタほとんど使わないな。
400デフォルトの名無しさん:2009/10/12(月) 23:31:21
>>392
JAVAやC#を使ってるとリソースの管理があやふやになってスレッドで悩むしな。
401デフォルトの名無しさん:2009/10/12(月) 23:31:52
privateが完全隠匿されていない具体的なデメリットって何?
402214:2009/10/12(月) 23:32:48
>>395
駄目だよ。
試してみたら?
403デフォルトの名無しさん:2009/10/12(月) 23:39:57
デストラクタっていうc++の仕様の言葉と
スレッドっていう現c++と無関係な仕様の言葉が
一緒に出てくると猛烈に楽しいです
もう少しヲチしたいのでがんばってください
404デフォルトの名無しさん:2009/10/12(月) 23:40:17
>>401
ヘッダ依存性
ヘッダ1つ変更しただけで全部のオブジェクトコンパイルしなおしとか嫌じゃない?
405デフォルトの名無しさん:2009/10/12(月) 23:40:40
>>402
後で試してみるわ。
406デフォルトの名無しさん:2009/10/12(月) 23:41:44
逆コンパイルの攻撃にあったときに
privateに何があるか知っていると解析しやすいとか
407デフォルトの名無しさん:2009/10/12(月) 23:42:33
>>403
スレッドを言語仕様に入れるとなると、今とは全く別の言語になるだろう。
というわけで、C++ではこれからもスレッドはライブラリのままだろうと予想。
408デフォルトの名無しさん:2009/10/12(月) 23:44:03
>>401
Pimplイディオムはヘッダの依存性問題を解決するためにある。そのために実行時の
パフォーマンスがやや低下するのがあまりC++的ではない気もする。
409デフォルトの名無しさん:2009/10/12(月) 23:44:20
>>404
なるへそ
410デフォルトの名無しさん:2009/10/12(月) 23:45:38
そこは>>225にならって
>何で試さなきゃいけなかったのw?
だろ・・・
411214:2009/10/12(月) 23:46:33
具体的には、

void func() {
  A a;
  ...// すごく重い処理
}

int main() {
  thread(&func).detach();
}

だとするとfunc内のaはデストラクタが呼ばれないよ。
ただしメインスレッドが終了する前にfuncを走らすスレッドが終了しなかった場合だけども。
412デフォルトの名無しさん:2009/10/12(月) 23:46:53
そりゃメインスレッドが終了したら、
d-torもクソもあるかってのw
413デフォルトの名無しさん:2009/10/12(月) 23:50:17
>>407
別に変わらないと思うけどな。
414デフォルトの名無しさん:2009/10/13(火) 00:04:10
次の言語標準で標準ライブラリにスレッドが入ることが既に決まってるんですが
415デフォルトの名無しさん:2009/10/13(火) 00:04:23
だから、お前はどこでスレッドを生成してどこで破棄したいんだよ
416デフォルトの名無しさん:2009/10/13(火) 00:10:25
>>411
スレッドの終了とプロセスの終了の違いを勉強して出直してこい
417デフォルトの名無しさん:2009/10/13(火) 00:44:20
「mainの終了==未終了のスレッドが終わる機会を失う」ってのが本当なら
どっちかっつーと、そっちの方が間違ってない?
418デフォルトの名無しさん:2009/10/13(火) 00:49:22
もはや言語の範疇ではないな
419デフォルトの名無しさん:2009/10/13(火) 00:49:33
mainの終了時に未開放のスレッドが残ってる設計のほうが間違ってる。
420デフォルトの名無しさん:2009/10/13(火) 00:52:34
プロセスが終わった後も動かし続けたい処理なら
スレッドじゃなくてforkとかで別プロセスにやらせないと
421デフォルトの名無しさん:2009/10/13(火) 00:56:36
>>419
そうか?
main()が起動したら、早々にワーカースレッドに仕事を投げて、
自身は終了するって設計はありだと思うが。
main()自体が各ワーカースレッドの結果に関与しないなら尚更だ。

大体、mainだって1スレッドに過ぎないし、スレッド間で親子関係も無い訳だから
mainが終了した時点で問答無用でプロセスが終了するのは、強引すぎる気がする。
422デフォルトの名無しさん:2009/10/13(火) 00:56:37
C++ って、main の終了がアプリの終了を意味してないだろ
423デフォルトの名無しさん:2009/10/13(火) 01:04:35
>>421
だとしても、プロセス全体の終了を申告する何かがいないとOSが困るだろ
いつプロセスを破棄していいかわからん
それがmainである必要はないのかもしれないけど
424デフォルトの名無しさん:2009/10/13(火) 01:07:49
>mainスレッドが終了するとワーカースレッドで作ったオブジェクトが正しく破棄されない
誰も知らない新事実発見おめでとうございますwwwwwwwww
425デフォルトの名無しさん:2009/10/13(火) 01:08:45
いくらでも解決方法はあるのに
わざとのらりくらりと道を逸らす池沼っぷりは天才的だなw
426デフォルトの名無しさん:2009/10/13(火) 01:09:32
まあC++からしたらその辺は環境依存じゃない?
Windowsは
>If the thread is the only active thread in the process, the process is terminated.
と、あるから全てのスレッドが終了するまでプロセスは終了しないっぽいけど…


タメスノハメンドクセ
427デフォルトの名無しさん:2009/10/13(火) 01:10:31
どう動かしたいか、どういうOSの仕様なのかによって変わる話なのに、無理矢理
どんな時でも行ける汎用的な物の話をしようとするからまとまらないんだろ。VM
じゃねーんだから。
で、分かってない奴も出てきてるし、相談者はそいつらの粗探しにばかり熱中して
まともな意見には全然反応しないし。
428デフォルトの名無しさん:2009/10/13(火) 01:12:26
プログラムのエントリーポイントが複数あったら実装が複雑になる
だからmainを作って、それの終了==プロセスの終了処理に入るように今どきのOSはなってんの
ワーカースレッドはmainスレッドの子供。親子関係は存在する。
429デフォルトの名無しさん:2009/10/13(火) 01:14:49
だからって init を C++ の標準に持ち込むのはどうかと
430デフォルトの名無しさん:2009/10/13(火) 01:15:23
うざいからもうこの話終われよ
threadの終了云々の時点でこのスレの話じゃねーだろ
431デフォルトの名無しさん:2009/10/13(火) 01:17:57
プロセスの終了シグナルをハンドルして解放処理を実行する基底スレッドクラスでも作れよ
432デフォルトの名無しさん:2009/10/13(火) 01:23:17
いや、WindowsだとTerminateThread的な終わり方をすると思うから、プロセス終了が
先に来たらアウトかと。
つーか、>>218がそもそもよく分からんけど、listの何が悪いんだろう。スレッドプール
なんかより気楽でいいんじゃね?
433デフォルトの名無しさん:2009/10/13(火) 01:27:34
>>431
シグナル全部マスクして、Termが来たときだけハンドラでjoinするような?w
434デフォルトの名無しさん:2009/10/13(火) 01:41:11
void A(){puts("A");} /
struct S{ A(){ A(); /*上のAを呼びたい*/ } };
これどうやって名前解決を上の方にもってかせることができますか?
435デフォルトの名無しさん:2009/10/13(火) 01:42:05
::A()
436デフォルトの名無しさん:2009/10/13(火) 02:00:33
thx。できました
437デフォルトの名無しさん:2009/10/13(火) 02:07:12
馬鹿が発生するとスレの伸びが早いなぁ
438デフォルトの名無しさん:2009/10/13(火) 02:31:26
半端な馬鹿だと、もっと馬鹿も湧いてきてトンチキな叩き合いを始めるからよく伸びる
「俺以外みんな馬鹿」特性も相性がいい
439デフォルトの名無しさん:2009/10/13(火) 02:37:37
じゃあ私も伸びに貢献しますo(^-^)o

struct A {
  void gay() {
    std::cout << reinterpret_cast<uintptr_t>(this) << std::endl; // 1192
  }
};
main() {
  uintptr_t val = 1192;
  A *a = reinterpret_cast<A*>(val);
  a->gay();
}

こんなことをしたいのですが、規格の範囲内で問題ありませんか?
Aは継承関係、メンバ変数および仮想関数は持たないものとします。
(申し訳ないですが、ケータイからの投稿なのでコードが雑になっているかもしれません)
440デフォルトの名無しさん:2009/10/13(火) 02:43:39
普通に駄目かと
441デフォルトの名無しさん:2009/10/13(火) 02:45:04
いや待て、別に問題出ないかもしれんな
何でそんなことしたいのかは知らんけど
442デフォルトの名無しさん:2009/10/13(火) 02:56:21
まあ答えは分からないからただの戯れ言だが、
farポインタやらなんかが混じってくると怪しそうだ。
uintptr_tとA *を同じようなものとして扱ってくれるという前提がいるかもしれん。
443デフォルトの名無しさん:2009/10/13(火) 03:07:28
そのコードが動作しない環境ってのも考えがたいけど、
「規格の範囲内で」っつーことなら多分未定義なんじゃね?
444デフォルトの名無しさん:2009/10/13(火) 03:41:20
ビットパターンは変わらないと保証されてるだろうから、メンバ関数コールの実装が
どのように規格で決められてるかの問題に絞られそうだけど、詳しくはシラネ
それに実用目的でもなさそうだし
445デフォルトの名無しさん:2009/10/13(火) 04:36:44
>>414
言語仕様という言葉が悪かったかもしれないが、標準ライブラリに入るのは
知ってる。ライブラリでない部分の話。
446デフォルトの名無しさん:2009/10/13(火) 04:52:26
int g = 0;

bool Hoge(void)
{
 g++;
 return true;
}

void Main(void)
{
 bool b = Hoge();

 if(b || Hoge())
 {
   g++;
 }

 return;
}

Main()を1回コールして、Main()のreturnまで処理が流れたとき、gの値はいくつになっているでしょうか?
447デフォルトの名無しさん:2009/10/13(火) 05:06:16
クイズかよw
なんで2になになるのかわからないんなら、そうはっきり質問しろよw
448デフォルトの名無しさん:2009/10/13(火) 05:07:18
2
449デフォルトの名無しさん:2009/10/13(火) 05:13:38
いや悪いwクイズのつもりだったんだがw
オマイラまじ頭いいな、自分は最近まで普通に3だと思っていたぞ。
少なくとも自分が読んだ教科書にはこんな説明は載っていなかった
450デフォルトの名無しさん:2009/10/13(火) 05:13:50
動揺して日本語おかしくなってるし
俺もまだ勉強がたりねぇなぁ
451デフォルトの名無しさん:2009/10/13(火) 05:14:36
短絡評価と言ってだな。&&と||だけは特別で左辺の値次第で右辺の式の評価をしないんだ。
452デフォルトの名無しさん:2009/10/13(火) 05:22:31
短絡評価って教科書とかに載ってないもんなのかな。
誰でも簡単にわかるみたいなペラい本じゃなきゃ、結構罠っぽい所だから載ってそうなんだが。
Cとか他の言語知ってるの前提の本なら載ってないかなぁ。
453デフォルトの名無しさん:2009/10/13(火) 05:43:17
K&Rに載ってる超基本
454デフォルトの名無しさん:2009/10/13(火) 06:05:10
条件式には&&をビット演算には&を使いましょうだけで説明が終わっている本なんてゴロゴロあるぞ
455デフォルトの名無しさん:2009/10/13(火) 06:40:07
K&Rは生産効率の低いパスカル野郎!
456デフォルトの名無しさん:2009/10/13(火) 06:48:52
>>411
試してみた。たしかにデストラクタは呼ばれなかった。detachはthreadのメンバに
なかった。仕様か。

まあ、素直にjoinするか、重い処理はmainでやりなさいってこった。

ttp://codepad.org/MdHSEBpT
457デフォルトの名無しさん:2009/10/13(火) 11:02:00
>>456
main()は状態変数でwaitしてスレッド側が終了したら状態変数に通知すればいいだけじゃないの?
458デフォルトの名無しさん:2009/10/13(火) 11:32:17
>>457
それは結局joinしてるのと同じじゃないか? 214は投げっぱなしにしたいみたいなんで。
mainで何も書かずにいきなりreturnを呼びたいんだろう。
459デフォルトの名無しさん:2009/10/13(火) 18:24:35
いっそatexitでjoinするコードを登録してしまえw

>>426
mainが終了するとexitが呼ばれて(ここまでは標準の範疇)、
exitの中でExitProcessが呼ばれるので、結局実行中のスレッドは全部終了させられる。
460デフォルトの名無しさん:2009/10/13(火) 19:05:17
何が目的なのか知らんが素直に親スレッドでjoinすればいいのに。
親子っていうのに親の方が長生きしなくちゃいけないのがアレだけど。
461デフォルトの名無しさん:2009/10/13(火) 20:48:53
>>456->>460
バカが掘り返してきました。
以下、第2回戦の開催です
462デフォルトの名無しさん:2009/10/13(火) 22:03:53
掘り返すことを否定するのはマ向いてないと思うの。
動いてるからいいじゃん、とかいうタイプに思える
463デフォルトの名無しさん:2009/10/13(火) 22:34:21
>>462
なんでもかんでも抽象化すればいいと思うなよw
漏れのある抽象化がどんだけひどい事になってるか。まったく。
464デフォルトの名無しさん:2009/10/13(火) 23:26:42
掘り返すのは勝手だが、あまりにも程度の低い話をいつまで続けてるのっていう
まともにMTで書いたこと無い奴同士が頑張りすぎ
465デフォルトの名無しさん:2009/10/13(火) 23:34:26
釈迦の手のひらの上で踊る猿を眺めるだけか
さすが釈迦は違う
466デフォルトの名無しさん:2009/10/14(水) 00:34:55
>>463
いつから抽象化の話になったんだ。
467デフォルトの名無しさん:2009/10/14(水) 01:31:25
大にせよ小にせよ、やってることは要はアドレス出してチップセレクト、リードかけたときにバスエラーを捕らえらそこからは異常系に入るわけで
それがたまたまアセンブラでやってるか他の言語かで結局同じことをやっているかって違いだけだろ
ちょっと入り組んでくるとみんな自分の得意分野にタコツボを始めやがるから無用な混乱が際限なく続くわけで
はっきり言ってタコツボに食われてるような連中の無軌道な煽りはうるさいだけで、ちゃんと理論たてて襲ってこいよって感じでさー
468デフォルトの名無しさん:2009/10/14(水) 01:38:56
誤爆なのか?
469デフォルトの名無しさん:2009/10/14(水) 01:56:42
誤爆だろ
470デフォルトの名無しさん:2009/10/14(水) 02:21:23
>>465
麻呂が猿だというでおじゃるか!?
麻呂は、麻呂は!
…ぐぅぅ、、さ、さるじゃ。。。
471デフォルトの名無しさん:2009/10/14(水) 02:24:01
実際、釈迦と猿以上の差があるしな、技術屋って
472デフォルトの名無しさん:2009/10/14(水) 05:26:03
君は釈迦の何を分かったと言うんだね。
473デフォルトの名無しさん:2009/10/14(水) 06:15:10
ゴールドセイントなのは知ってる
474デフォルトの名無しさん:2009/10/14(水) 06:22:45
コード内にSystem関数を介してコマンド(mv)を実行しているプログラムがあり
LinuxではGCCをコンパイラとして使っています。
このプログラムをWindowsのMinGWでもコンパイル・実行できるようにしたいのですが
Windowsのシェルでは mv → move のため、そのまま流用ができません。
なので、プリプロセッサ または 実行時にWindowsであることを認識し
実行するコマンドを変えたいと思うのですが、何か方法があるでしょうか?

(ヘッダに自分で #define MINGW とか書いてifdefで判定というのは無しで)
475デフォルトの名無しさん:2009/10/14(水) 06:26:24
cp move mv

それかmvの実行前にmvの存在確認。
476デフォルトの名無しさん:2009/10/14(水) 06:30:22
Windows環境で動く目的でWindows用のバイナリは作られるわけで
実行時にWindowsであることを認識するなんて意味あるのか
477デフォルトの名無しさん:2009/10/14(水) 07:13:34
つーか、system("mv")ではなくremove()を使うべきだと思うんだが。

まあ #ifdef _WIN32 で条件コンパイルが必要になるケースももちろんあるけどな。
478デフォルトの名無しさん:2009/10/14(水) 07:17:05
renameですか?
479デフォルトの名無しさん:2009/10/14(水) 07:45:28
Boost.Filesystem等のライブラリを使う
480デフォルトの名無しさん:2009/10/14(水) 07:56:49
ポインタについてなんだけど

int i;
i = 0;
func( &i );

func(int *i){...}

一応思ったとおりに動いてくれるけれど、こういう書き方ってどうなのかな?

int i;
int *p;
p = &i;
func( &p );

ってやらないといけないの?
481デフォルトの名無しさん:2009/10/14(水) 07:59:28
>>480
え?
482デフォルトの名無しさん:2009/10/14(水) 08:21:54
コンパイルエラー
483デフォルトの名無しさん:2009/10/14(水) 08:25:26
なにがいいたいのかわからない
質問するなら相手がわかりやすいように書けよ
484デフォルトの名無しさん:2009/10/14(水) 08:45:47
>>480
iのアドレスを他の変数を経由してfuncに渡したいってんなら

func(p);

ポインタについての理解が足りてない。
485デフォルトの名無しさん:2009/10/14(水) 10:37:05
>>480
後者の最後は>>482だから>>484のように書き換えたとして、後者は冗長なだけ。
というか前者だけiに0を代入しているのが意味不明。>>483に同意。
486デフォルトの名無しさん:2009/10/14(水) 10:39:34
例を見せて「こういう〜」で済ます時は、
例の中の注目点が誰の目にも一箇所になるようにしてくれないとな。
487485:2009/10/14(水) 10:40:58
ああ、いやコンパイルエラーにはならないか。
でもfunc(p);にしないと期待する動作にならない。
488デフォルトの名無しさん:2009/10/14(水) 11:08:48
引数が通常扱う整数変数じゃなくポインタ変数になってるから
仮引数、実引数ともにポインタ変数でなきゃダメなのかっていう質問じゃない?
どっちでもいいけど、普通後者みたいな回りくどいことはしない。
489デフォルトの名無しさん:2009/10/14(水) 11:14:01
>>488の読解力に感動した
なるほどそういう意味だったのか
490デフォルトの名無しさん:2009/10/14(水) 11:55:08
>>487
>コンパイルエラーにはならないか。
なる。int* が欲しいところに int** 渡してんだから。
491デフォルトの名無しさん:2009/10/14(水) 14:59:48
世の中には物分かりの悪い人、相手が何を言ってるのか分かろうという努力の足りない人が
いるってことがよくわかった。
492デフォルトの名無しさん:2009/10/14(水) 15:06:53
三つの意味で奇妙なレスだなぁ。
この流れはそんなことがわかっちゃう流れとは程遠いということと、
普通の知能の人間はそんなこと小学校に入る頃にはわかるということと、
自分のその結論こそ、物分かりが悪く、相手が何を言っているのか
分かろうとしていない結果かもしれない可能性を疑う心が無いこと。
493デフォルトの名無しさん:2009/10/14(水) 15:10:28
えっ、そうなの?
494デフォルトの名無しさん:2009/10/14(水) 15:11:14
>>493
なにがいいたいのかわからない
質問するなら相手がわかりやすいように書けよ
495デフォルトの名無しさん:2009/10/14(水) 15:16:54
>>494
質問じゃないんで。オウム返しはロボットみたいだよ。

> この流れはそんなことがわかっちゃう流れとは程遠いということと、

自分はすぐ分かったけど、普通はそうじゃないのか。


> 普通の知能の人間はそんなこと小学校に入る頃にはわかるということと、

これは意外。


> 自分のその結論こそ、物分かりが悪く、相手が何を言っているのか
> 分かろうとしていない結果かもしれない可能性を疑う心が無いこと。

言っているのは質問者であって、あとはそれに分からないと言っている
リアクションなんで、理解も何もなく、ああ、分からないんだなぐらい
しか分からない。
496デフォルトの名無しさん:2009/10/14(水) 15:39:24
>>495
> 質問じゃないんで。オウム返しはロボットみたいだよ。
質問だし、オウム返しではないね。

> 自分はすぐ分かったけど、普通はそうじゃないのか。
ガムの包み紙を見て、そこに宇宙の真理が書かれていることが突如「分かっちゃう」のと
同じだからなぁ。普通とは言い難い。
497デフォルトの名無しさん:2009/10/14(水) 15:47:06
>>496
えっ、そうなの?ってのは意外で驚いてる気持ちを表してるのであって、質問じゃないんだよ。
それで分からなかったら仕方ないけどね。

それと、483と同じ発言なんで、それについてオウム返しと表現しただけなんで。機械的な
繰り返し発言とでも言えば良かったかな。分かりやすいように。


> ガムの包み紙を見て、そこに宇宙の真理が書かれていることが突如「分かっちゃう」のと
> 同じだからなぁ。普通とは言い難い。

488も普通じゃないんだ。まあ、数が多いから普通って言葉を使うのかもしれないね。
498デフォルトの名無しさん:2009/10/14(水) 15:49:26
論理的に1つの答えを導き出せる物とそうでない物がある。
質問者の意図の推測なんてやっても報われない。
499デフォルトの名無しさん:2009/10/14(水) 15:58:40
論理なんてものはイデアでしかないよ。現実は論理みたいなものしかないよ。

ここで使ってる日本語ですら厳密には論理的でないのに、どうやって論理的な
判断ができるんだってこと。

質問者の意図の推測程度のことができないと、日々の業務もできないし、
人間関係も構築できない。
500デフォルトの名無しさん:2009/10/14(水) 16:01:58
日々の業務ができず、人間関係も構築できない
低レベルな質問だからしょうがないのでは。
501デフォルトの名無しさん:2009/10/14(水) 16:05:14
世の中そんな人のほうが多くて、だから、食い扶持にあずかれるんだから、
ここでトレーニングしとかないと、低レベルな人間になって干上がっちゃうかもね。
502デフォルトの名無しさん:2009/10/14(水) 16:05:46
>>497
> 機械的な繰り返し発言とでも言えば良かったかな。分かりやすいように。
いや、この「分かりやすい」は無理に良い方に回ろうとしてるだけで、
正しくは「間違った日本語を使わずに、正しく言えば良かった」。

> 488も普通じゃないんだ。
>>488は推測しているだけで、質問者の質問がわかったわけではない。
簡単な努力で消すことが可能な複数の可能性を、質問者が平然と残していることだけ
なんでそんなに寛大なのかわからんけど。
503デフォルトの名無しさん:2009/10/14(水) 16:08:06
>>501
まぁ職場のレベルによるかな。
まず質問者にトレーニングが必要だけど。
504デフォルトの名無しさん:2009/10/14(水) 16:15:27
>>502
日本語等自然言語は辞書に載ってない使い方をしても許容されるもんだと思うよ。
似た概念なら読むほうもある程度補える。君が言うほどおかしい表現でもないと
思うが。揚げ足を取ってるつもりなのかもしれないけど。

推測云々の件は、分かったというのはどんなときも主観でしかありえないんで。

>>503
同僚ならトレーニングさせることもできるけど、顧客は難しいかもね。
505デフォルトの名無しさん:2009/10/14(水) 16:21:49
>>504
> 君が言うほどおかしい表現でもないと思うが。
基本、いい加減なことを書く側に甘いんだね。

> 同僚ならトレーニングさせることもできるけど、顧客は難しいかもね。
顧客なら、曖昧なところはこちらから聞き返して、意図の解釈を固めるでしょ。
それは、このスレの人間が「わからん」という反応をしたことの丁寧バージョンだ。
まさか、このレベルのいい加減な質問に対して折り返しの確認も取らず、「主観」で解釈して
それに基づいた回答だけして、よくわかってなさそうな先方がわかってないまま
「わかりました」とその話題終えちゃって、後々の負の布石を作るようなことはしないよね。
506デフォルトの名無しさん:2009/10/14(水) 16:26:25
>>505
まあ、ここは失敗できない場でもないし。

分かりにくい質問をしてきた相手にある程度推測や予断をして「こうなの?」って
聞き返すぐらいの余裕は欲しいよね。ただ分からんじゃ進歩なさそうだし。
507デフォルトの名無しさん:2009/10/14(水) 16:38:59
>>491-506
C++ とはまったく関係のない、どうでもいい話になると
そうやって湧いてくるのな、君らは。
508デフォルトの名無しさん:2009/10/14(水) 16:39:55
>>488 2行目で止めておけばよかったんだね。
俺が悪かったよ。
以下C++スレに戻ります。
509デフォルトの名無しさん:2009/10/14(水) 16:46:09
>>507
そういうのを見ることで自意識が変に刺激されて、
それらのやり取りよりさらに意味の無いレスをしちゃうタイプだな、君は。
510デフォルトの名無しさん:2009/10/14(水) 16:46:24
>>507
悪い悪い。頭の固い連中を見てて、いてもたってもいられなくなって。
だが、わざと分からないと言って、質問者をトレーニングしていたのかも
しれないとも思えてきた。そこは反省。

以下、C++の話題をどうぞ。
511デフォルトの名無しさん:2009/10/14(水) 16:57:55
>>495
大丈夫よ。俺もすぐ理解した。
というかそうじゃなきゃその二つで悩まないもんな
512デフォルトの名無しさん:2009/10/14(水) 17:00:32
質問者の文章力がたりないと言ってる人は初心を忘れた、もしくは他人に教えたことのない人だよ
513デフォルトの名無しさん:2009/10/14(水) 17:15:54
本当に文章力が足りない時もよくあるよ
514デフォルトの名無しさん:2009/10/14(水) 17:25:01
基本、物事を自分で調べず、人に訊く人は、文章力も残念なことが多いよ。
駄目な奴は駄目に決まってるんだから、そんなトートロジーを新たに指摘しても
仕方がない。

駄目な点を踏まえて質問に答えるなり、物分かりの悪い応対をして相手を
目覚めさせるなり、無視するなりすればいいんじゃないのか。

自分も本当に物分かりが悪くなってしまったら、相手と同じレベルに落ちてしまう
んで、それはまずいと思う。
515デフォルトの名無しさん:2009/10/14(水) 17:27:57
わけわからん質問をしてくる奴は、大抵自分で調べようとしない奴。
自分で調べても分からないとき、初めて質問してくるタイプの人間は、質問の仕方もうまい。

ちゃんと質問できる奴は大抵できる奴だと相場で決まってる、これ教える側の人間の常識ね。
516デフォルトの名無しさん:2009/10/14(水) 17:32:52
だが、これだけネットが普及してて、C++のように全部文献でなんとかなる分野
(自転車の乗りかたなどは文献や動画だけではどうしようもない)で、質問する
のも疑問はある。全部自分でできるのでは。
517デフォルトの名無しさん:2009/10/14(水) 17:42:15
>>516
お前宇宙工学の教科書渡されたら宇宙工学出来るようになるわけ?
物性論の教科書渡されたら物性論出来るようになるわけ?

専門的な事が全て自分だけで出来る超人なんてそうそういない。
ある程度までのレベルまでは行けるだろうが、人に頼らないと抜けられない壁もある。

そういう程度以上の質問なら歓迎なんだがな。
518デフォルトの名無しさん:2009/10/14(水) 17:45:59
わざわざ「なんとかなる分野」という言い方で
対象を絞っていることを示してから言及している人に向かって
「そうじゃない分野もあるぞ!」ということをネチネチ語ってどうすんだろ。
519デフォルトの名無しさん:2009/10/14(水) 17:47:55
>>517
そりゃ人によるとしか。それに、C++はそれらの分野に比べれば楽なほうではないか?
詳しくは知らないが。

所詮は自分の眼鏡を通して好き嫌いを言っているだけに聞こえるな。その眼鏡は
人それぞれであって、混乱の元。それなら、十把一絡げにあらゆるレベルの質問者を
受け入れたほうが合理的ではないかとも思えるが、2chではそんな合意は無理か。
済まなかった。
520デフォルトの名無しさん:2009/10/14(水) 17:51:22
>>518
独学のスーパーハカーさんちーっすw
521デフォルトの名無しさん:2009/10/14(水) 17:52:20
もう発狂?
522デフォルトの名無しさん:2009/10/14(水) 17:55:15
今日はいろいろ勉強になったし、過去の疑問も解消してきた。ありがとな。
523デフォルトの名無しさん:2009/10/14(水) 17:56:10
なんとかなるっていうのがどの程度のレベルなのかにもよるよね
両方の意見は一理あると思うけど、汎用的な言いくるめ方はどちらでも不可能だと思う。
524デフォルトの名無しさん:2009/10/14(水) 18:00:09
ていうかそれ以前に、宇宙工学を独学する例なんか持ち出す質問じゃないだろ今回のコレ。
525デフォルトの名無しさん:2009/10/14(水) 18:06:15
興味を持って自分で勉強する専門分野という点では似通っているともとれる
内容は全く違うのは当たり前だけど、ここで引き合いに出すのは全く的外れというわけでもない。
526デフォルトの名無しさん:2009/10/14(水) 18:15:05
所詮、例え話は不毛な争いのもと
527デフォルトの名無しさん:2009/10/14(水) 18:21:45
例え話は興奮するとすぐ極論に繋がる。
そして大抵は興奮状態で用いられるし。
528デフォルトの名無しさん:2009/10/14(水) 18:33:44
質問者は金をくれる顧客ではないのだから
意味不明な質問には意味不明だとレスが付くのは当然だよ。
529デフォルトの名無しさん:2009/10/14(水) 18:49:13
金をくれないから頭を使わないと公言して憚らないあなたの将来が心配です。
530デフォルトの名無しさん:2009/10/14(水) 18:55:16
頭を使うとかわけわからん。何の話だろ。
531デフォルトの名無しさん:2009/10/14(水) 18:56:44
>>529
その読解は、本気で頭を使った本気の内容ですか?
532デフォルトの名無しさん:2009/10/14(水) 18:59:15
意味不明な質問に対して「意味不明だ」とだけ答えるのではなく、質問の意味を
理解しようと努力するには頭を使わないといけないよ。
533デフォルトの名無しさん:2009/10/14(水) 19:00:07
>>517
結局、「そういう程度」がどういう程度なのか、肝心な点が抜けてるじゃないか
おまえさんの「好み」によらない客観的な基準を言ってみな

C++ は独学では習得できない、ということの証明から必要になるはずだが
534デフォルトの名無しさん:2009/10/14(水) 19:02:33
本気を2回重ねて使うあたり程度が知れるな
535デフォルトの名無しさん:2009/10/14(水) 19:03:26
なんだこれひどいな
何がそんなに悔しかったんだよ
536デフォルトの名無しさん:2009/10/14(水) 19:04:47
金をくれる顧客が、意味不明な質問をした際、
意味不明だと言い返さない人がいると聞いて
537デフォルトの名無しさん:2009/10/14(水) 19:07:06
顧客が意味不明なことを言う

意味不明です

顧客「えっ」

これはないわ。


顧客が意味不明なことを言う

例えばこういうことでしょうか?

顧客「いや違う違う。それは──」

大体こんな感じじゃないの。
538デフォルトの名無しさん:2009/10/14(水) 19:07:24
>>536
君は客に向かって「あんたの質問は意味不明だ」と言い返すのかい?
539デフォルトの名無しさん:2009/10/14(水) 19:15:26
ああそういう。
540デフォルトの名無しさん:2009/10/14(水) 19:15:29
当たり前だろ
言い方は「もう少しわかりやすく説明してもらえませんか?」とか
「もう少し具体的に言い換えてもらっていいですか?」みたいにはなるだろうけど
意味のわからない質問に適当な答えを返すほど最悪なことはない
541デフォルトの名無しさん:2009/10/14(水) 19:16:09
ああ、そういう話か、の略
542デフォルトの名無しさん:2009/10/14(水) 19:18:19
>>540
金をくれる顧客じゃないから、
「もう少し具体的に言い換えてもらっていいですか?」
のような引き出し方をするのは面倒くさく、意味不明と突っぱねるという話だったようだよ
543デフォルトの名無しさん:2009/10/14(水) 19:18:20
>>540
それは状況によるし、はっきり言わないほうがいいときもあるよ。むしろ、
そっちのほうが多いか。推測して「こうですか?」と訊くほうが好ましいのでは。
544デフォルトの名無しさん:2009/10/14(水) 19:20:28
仮定の話も例え話と同じくらい不毛だな。
545デフォルトの名無しさん:2009/10/14(水) 19:28:11
もう少し具体的に言い換えてもらっていいですか?と
意味不明は同じじゃないだろ
546デフォルトの名無しさん:2009/10/14(水) 20:05:37
そもそも>>480-488の流れで「意味不明」と言ってるのは>>483>>485ぐらいなんだが。
>>483は質問が情報不足である事を言っているし、>>485は1行目で分かる範囲の回答を出している。
一体、回答者にどれだけ求めているんだ?
547デフォルトの名無しさん:2009/10/14(水) 20:10:04
別に求めてはないだろう。各自の自主性を促してるだけで。嫌なら「意味不明だ」、
「何が言いたいのか分からない」でいいんじゃないか。
548デフォルトの名無しさん:2009/10/14(水) 20:11:57
もはやスレの流れが意味不明。
549デフォルトの名無しさん:2009/10/14(水) 20:22:43
>>547
一体、回答者にどれだけ求めているんだ?
→別に求めてはないだろう。各自の自主性を促してるだけで。

こんなの言葉遊びだろw
スレ違いの話をこれだけやっておいて何言っているんだ。
550デフォルトの名無しさん:2009/10/14(水) 20:29:13
>>549
レスがあるからレスしたまで。もういいだろ。C++の話に戻ろうぜ。
551デフォルトの名無しさん:2009/10/14(水) 20:42:02
気に入らない質問には答えなければいいのに
「聞き方の指導」まで始めるから C++ から逸れるんだよ
552デフォルトの名無しさん:2009/10/14(水) 20:47:58
そうっすね。
553デフォルトの名無しさん:2009/10/14(水) 21:02:07
今更だけどstatic int = の値がおかしいっていってた人だけどクリーン、リビルドしたら直りました
世話になりますた
554デフォルトの名無しさん:2009/10/14(水) 21:43:04
ま、本当に迷惑な存在は
わかりづらい質問者よりも
意味の無いやりとりを延々と続ける
スレチな回答者ってことで
自重出来ない自称頭いい人は死んで欲しいよ
555デフォルトの名無しさん:2009/10/14(水) 21:45:49
そうやっていちいち回答者を煽らないと気がすまないのか
556デフォルトの名無しさん:2009/10/14(水) 22:28:30
>>555
お、早速バカ1号が釣られてきたな。
557デフォルトの名無しさん:2009/10/14(水) 22:48:21
バカはお前だ。
0-origne なのでバカ0号が >>554 になる。
558デフォルトの名無しさん:2009/10/14(水) 23:02:14
よう
釣られボーグ002と003
559デフォルトの名無しさん:2009/10/14(水) 23:02:58
>>557
どうでもいいな。だからお前はバカなんだ。
560デフォルトの名無しさん:2009/10/14(水) 23:03:24
005
561デフォルトの名無しさん:2009/10/14(水) 23:04:29
こんなところで自己満足に浸ってる暇があったら少しでもいいコードを書けるようにしたらどうだ?
562デフォルトの名無しさん:2009/10/14(水) 23:07:02
>>561
さて、第三ラウンドの相手はお前でいいのかな?
563489:2009/10/14(水) 23:13:56
えらくスレが伸びてると思ったら・・
俺が変に合いの手入れたから質問者を調子付かせてしまったのかなスマンかった。
564デフォルトの名無しさん:2009/10/14(水) 23:15:31
いや、自称インテリの勘違い回答者が調子付いただけだよ
565デフォルトの名無しさん:2009/10/14(水) 23:18:37
みんなストレスでも溜まってたんじゃないの
566デフォルトの名無しさん:2009/10/14(水) 23:25:58
2chでは皆結局余裕なくなってくるよね。仕方ないのかなと。
567デフォルトの名無しさん:2009/10/14(水) 23:34:22
煽り屋が空回ってるだけでそ
568デフォルトの名無しさん:2009/10/15(木) 00:24:24
お前らが馬鹿ばっかだっていう事は良くわかった
569488=508:2009/10/15(木) 00:31:09
まだ続いてたのか。
煽り屋がシャドウボクシングしてるようで訳がわからん。
一体何と戦ってるんだ?
いいかげんスレタイ読み直して、C++の話しようぜ。
570デフォルトの名無しさん:2009/10/15(木) 01:22:06
C++でこの煽りあいを解決するプログラムを俺が書いてやるよ!
571デフォルトの名無しさん:2009/10/15(木) 01:38:34
じゃあまずミューテックスAとBを用意して、質問者はA->Bの順、回答者はB->Aの順で
書き込み権を取得しないと書き込めないようにしようか
572デフォルトの名無しさん:2009/10/15(木) 01:46:06
匿名でID非表示の掲示板じゃあ何をやっても無為だな
信頼の失墜と挽回が蓄積されないから何をやってもリスクにならない
顔写真・住所氏名・クレジットカードの番号を晒さないと書き込めないようにすればマシになるんじゃね
573デフォルトの名無しさん:2009/10/15(木) 03:08:49
そこまでしなくてもIDだけでもマシになるだろ、マシには
574デフォルトの名無しさん:2009/10/15(木) 03:19:39
数学とかの勉強みたいに数をこなす感じでC++身につけたいんですけど
初級から段々レベルアップしていく問題集的なものってありますか?
575デフォルトの名無しさん:2009/10/15(木) 03:27:06
幾何学と統計学が同じような道を通るとは思ってないだろうけど、基礎的なところは共通して学べるので
そういう意味では初心者用の本を読めとしか言えないかなぁ
取っつきやすさを求めないのならK&R
576デフォルトの名無しさん:2009/10/15(木) 03:28:16
ってC++スレでした。
適当に手広く知識を拾い集めてみてはいかがか。
その後EffectiveC++などに。
577デフォルトの名無しさん:2009/10/15(木) 03:36:42
>>574 宿題スレで待機。お題に答えたり、人の答えを添削したり。
578デフォルトの名無しさん:2009/10/15(木) 03:40:55
>>574
C++と同時にC#を勉強することをおすすめします
C++だけやっていると馬鹿になるぞ
579デフォルトの名無しさん:2009/10/15(木) 03:53:46
C#イラネ
アセンブラとLispとC++で十分
580デフォルトの名無しさん:2009/10/15(木) 08:03:13
windows2000+lennyの俺にもタダで使えるC#開発環境が有れば使ってやっても良い
581デフォルトの名無しさん:2009/10/15(木) 08:42:26
lenny?
582デフォルトの名無しさん:2009/10/15(木) 08:43:06
>>573
まじでこの板はID導入すべきだと思う
583デフォルトの名無しさん:2009/10/15(木) 08:44:33
C#は馬鹿専用
要はVBみたいなもんだ
584デフォルトの名無しさん:2009/10/15(木) 09:18:40
C#は無駄な手間が省かれているから扱いやすいだけでC++より書き手の技量が要求される言語だよ
585デフォルトの名無しさん:2009/10/15(木) 09:19:27
C++の方が明らかに馬鹿専用
586デフォルトの名無しさん:2009/10/15(木) 09:49:59
C#はC++落ちこぼれの為の救済言語
つまり馬鹿でもわかりやすいように作ってある
その為パフォーマンスもでない上MS専用なので
まだJavaやってる方がなんぼかマシ
587デフォルトの名無しさん:2009/10/15(木) 09:51:22
C++CLIはC++信者からも叩かれるマジもんの産廃
588デフォルトの名無しさん:2009/10/15(木) 09:54:08
なるほどなWindowsしか知らないアホならそう思うのかもな
窓開発者は低レベルな奴が多いから仕方ないが・・・
589デフォルトの名無しさん:2009/10/15(木) 09:59:22
C++は言語がOOPをサポートしていないから小手先の小細工ばかりで設計がグチャグチャ
590デフォルトの名無しさん:2009/10/15(木) 10:00:48
>>589
「馬鹿な僕は理解できませんでした」って意味?
591デフォルトの名無しさん:2009/10/15(木) 10:21:32
C#の言語仕様は非常に優れてる。
単に言語仕様だけをC++とC#で比較したら、どう考えてもC#の方が優れてるだろう
多重継承のような「使いようによっては使えるけど、ミスるとヤバい」的な仕様を
一切削ったC#は素晴らしい。
>>590
「理解出来ませんでした」って奴をバカにしてるようだけど、
凡マに理解出来ない言語仕様こそクソ。生産性を下げるだけでしょ?

今のプロジェクトでいるんだけど、
むしろC++の言語仕様とかには神みたく詳しいんだけど、
OSとかのことを全然知らない奴がいる。
700スレッド立てて通信するような設計をしててビックリしたよ。
IO多重化の概念を知らなかったらしい。
そういう奴に限ってC#、Javaなんかを批判してる。
592デフォルトの名無しさん:2009/10/15(木) 10:24:21
おまえの愚痴はどうでもいい
593デフォルトの名無しさん:2009/10/15(木) 10:29:40
>>591
低レベルなお仲間同士で固まっていて幸せですね
594デフォルトの名無しさん:2009/10/15(木) 10:43:39
MSは開発者を囲い込んでツール売って利益を上げたいだけだから5年後C#が主力言語かも怪しい
595デフォルトの名無しさん:2009/10/15(木) 10:51:09
> ミスるとヤバい

GC とかで喜んでてリソースリークでハマるような、自分を捉えられない痛い連中が後を絶たない
電子土方って何の対価でメシ食ってるんだっけな

〜〜言語は、それを使う人が何を考えることができるかを決めてしまう〜〜
・・・とある有名本に書いてあったような気がするが
子供のオモチャと違ってプロの道具は危なくていいんだよ
根本的に要求が違うんだから
596デフォルトの名無しさん:2009/10/15(木) 10:54:18
お前ら他所でやれ、と何度言われても理解できない莫迦同士
仲良くね。
597デフォルトの名無しさん:2009/10/15(木) 10:55:56
つまり、プロは必要ならF1カーにも乗るが、アマチュアは市販の一般車両で我慢しておけってことですね。
でもまぁ、プロも一般道では市販車で移動した方が安心安全なわけで。
598デフォルトの名無しさん:2009/10/15(木) 11:12:01
>>597
null pointer
599デフォルトの名無しさん:2009/10/15(木) 12:20:50
多重継承より委譲の方が良いのはわかってるけどメンドクサイんだよね。
600デフォルトの名無しさん:2009/10/15(木) 12:34:42
市販車ならC#の他に便利なのがいろいろとある。別にコンパイラ言語でなくてもいい。
601デフォルトの名無しさん:2009/10/15(木) 12:35:46
>>577
なるほど宿題スレか その手があったか
ありがとうございました
>>578
同時進行できるほど賢くないけど一応やってみます、ありがとうございました
602デフォルトの名無しさん:2009/10/15(木) 12:39:06
M$と心中する気があるのならどうぞ。
603デフォルトの名無しさん:2009/10/15(木) 12:41:07
演算子の実行順番がよくわからなくなりました。
わかりやすい解説サイトとかないでしょうか?

int a[] = { 10, 20, 30 };
int *p = a + 1;
int b = --*++p;

604デフォルトの名無しさん:2009/10/15(木) 12:44:47
宿題スレ見たけど今の自分には難しいのが多くてあんまり使えんな・・・
素直に基礎をもっと進めろってことか・・・
605デフォルトの名無しさん:2009/10/15(木) 12:44:56
規格書に書いてるが、識別子に近い順ぐらいは想定できてほしい。
606デフォルトの名無しさん:2009/10/15(木) 12:45:47
>>604
それなら、そういうことなんだろう。
607デフォルトの名無しさん:2009/10/15(木) 12:45:52
608デフォルトの名無しさん:2009/10/15(木) 12:49:14
市販車が「安全」て、どこから出てきた話だ?
ミスるとヤバいって引用を見なかったことにしているならわからんでもないが
エアクッションを GC にでも喩えたかったのかね
609デフォルトの名無しさん:2009/10/15(木) 12:51:29
>>608
立ち位置を明確に。C#が安全でないと言いたいのだろうが。
610デフォルトの名無しさん:2009/10/15(木) 13:00:25
C++は安全装備を自分で付けなきゃならないから、付け方が分からないと危険に
なるだけで、流して安全に書くにも問題は無いよ(つーかパレートの法則的に80%
のコードは実際そのように書かれるし)

ただ、ごく簡単な仕事にまで使うと開発コストが高いのは事実
でも、簡単な仕事の開発コストを下げるのはPerlやPythonやRubyの方が遙かに得意
611デフォルトの名無しさん:2009/10/15(木) 13:05:18
Python+C++が最強ですよ
互いの長所を十二分に活かせて開発速度が圧倒的に速い
612デフォルトの名無しさん:2009/10/15(木) 13:05:49
c++でsocketってどうやるんですか?
613デフォルトの名無しさん:2009/10/15(木) 13:07:51
Pythonなら.NETでも走るよね。
どの程度の信頼性なのかは知らないけど。
614デフォルトの名無しさん:2009/10/15(木) 13:09:38
IronPythonはMSがリリースしてるくらいだからそれなりに動くんじゃね?
もう結構前になるから、初物のバグもある程度は取れてそうだし。
615デフォルトの名無しさん:2009/10/15(木) 13:09:53
>>612
boost::asio
616デフォルトの名無しさん:2009/10/15(木) 13:11:29
>>612
Boostを使ってもいいし、Cと同様にシステムコール直叩きをしてもいい
617デフォルトの名無しさん:2009/10/15(木) 13:11:48
>>613
基本スタイルはとりあえず全部Pythonで作成し、高速化したい部分をC++
.NETは全くしらないけど、パフォーマンスが出せるならそれも有りだと思う
618591:2009/10/15(木) 13:12:49
今ここで「釣りでしたwww」って言ったらみんな怒る?w
619デフォルトの名無しさん:2009/10/15(木) 13:13:35
後釣り宣言を見て怒る訳がないw
620デフォルトの名無しさん:2009/10/15(木) 13:25:40
釣りにしても動機がよく分からない。
621デフォルトの名無しさん:2009/10/15(木) 13:27:33
>>611
PythonがPerlやRubyよりC++と親和性が高いと言いたいのだろうか?
理由とかある? 参考までに。
622デフォルトの名無しさん:2009/10/15(木) 13:29:56
Boost.Pythonが有名だからじゃねーの?
623デフォルトの名無しさん:2009/10/15(木) 13:33:21
>>595
俺プロですって言ってるみたいだなw
624デフォルトの名無しさん:2009/10/15(木) 13:37:17
煽るだけの方はお引き取りを。
625デフォルトの名無しさん:2009/10/15(木) 13:40:15
まぁぶっちゃけスクリプト言語はPerlしか使わない俺でも、Pythonみたいに欧米系が
こぞって集まってる奴は最強環境になってるだろうなぁとは思う
ただ、わざわざ覚えるほどのことではないとも思ってる
626デフォルトの名無しさん:2009/10/15(木) 13:41:35
>>625
欧米系とは欧米の技術者たちという理解でよろしいか?
627デフォルトの名無しさん:2009/10/15(木) 13:42:41
>>626
うむ
あっちじゃ完全にPython、たまに変わり種がRubyやPerl、って感じじゃね?
628デフォルトの名無しさん:2009/10/15(木) 13:43:46
Perlは6.0で互換性を捨てたのが致命傷になったと思うなぁ
どんなにぐっちゃぐちゃでもいい、って人達の楽園だったのに
629デフォルトの名無しさん:2009/10/15(木) 13:45:21
じゃ、俺もPythonやるか。
630デフォルトの名無しさん:2009/10/15(木) 14:00:50
>>603
分からなくなったら括弧を付ければいい
631デフォルトの名無しさん:2009/10/15(木) 14:01:30
Pythonは素で速いしライブラリも充実してるよ。速さについては普通にC++で作成するより速い事もしばしば。
C++との親和性が高いのは事実だけど他の言語と比較して・・・というのであれば詳しくないのでよくわからんです。
632デフォルトの名無しさん:2009/10/15(木) 14:28:31
project eulerの問題等でpythonじゃ工夫しなきゃ終わらないやつでもC++ならbluteforceで終了〜
ってぐらいの遅さではあるけどな
633デフォルトの名無しさん:2009/10/15(木) 15:49:56
さすがに「普通に」組んでてPythonに負けるようだと、「普通」の基準がずれてると思う
いくらPythonがかなり頑張ってると言ってもねぇ
634デフォルトの名無しさん:2009/10/15(木) 17:16:49
CやC++で書かれたインタプリタを使っていて
何言ってるんだか(微笑)って感じですかね
635デフォルトの名無しさん:2009/10/15(木) 18:01:29
>>605>>607>>630
こういう奴らって頭がおかしいのかな?四則演算より複雑な場合は括弧は必須だろ
コードってのは自分だけが読むものじゃないんだろメカニカルには無意味でも読み手のコストを優先すべき
C++ってのは表現の自由度が高すぎて危険な暗黙的表現をいくらでも使えるってのが言語仕様の大きな欠点の一つなんだろ
言語仕様が糞だからコーダーがいちいち神経を磨り減らして気を配らなきゃいけないのに
>>605>>607>>630こんなお粗末な考えしか出来ない馬鹿はC++を扱う資格なんて無いねおとなしくC#でも使っているべき
636デフォルトの名無しさん:2009/10/15(木) 18:06:31
何が動機でそんな釣りばっかりやるんだw
637デフォルトの名無しさん:2009/10/15(木) 18:06:37
単に質問に答えただけで叩かれるのかw
638デフォルトの名無しさん:2009/10/15(木) 18:08:02
あれか、C#に対するアンチ活動か。分かりにくいよw
639デフォルトの名無しさん:2009/10/15(木) 18:10:24
「四則演算より複雑」って何?

算術以外の演算子の優先順位を「暗黙的表現」するなってことなら
void (hoge::hage)()
{
}
とか書けって??
640デフォルトの名無しさん:2009/10/15(木) 18:10:58
>>639
ややこしくなるからw
641デフォルトの名無しさん:2009/10/15(木) 18:18:04
今回だけの話しじゃないぞ
「分からなかったら括弧を付ければいい」っていう「思想」がどれだけ危険なことであるか
C++を扱う者"だからこそ"よく理解しておくべきだな
そしてこの危険な「思想」の多くを実際に言語仕様が許容している事実もな
642デフォルトの名無しさん:2009/10/15(木) 18:21:30
自由度の高い柔軟な言語だから優秀ではあるがアホに扱わせると危険
自分が本当にアホではないのか今一度考えるべきだね
643デフォルトの名無しさん:2009/10/15(木) 18:22:32
アホですいません。
3ヶ月前に自分が書いたコードなのに
意味がよく理解できないとか普通…^^;
644デフォルトの名無しさん:2009/10/15(木) 18:23:12
なにここ怖い
645デフォルトの名無しさん:2009/10/15(木) 18:24:51
四則演算より複雑な全ての演算に括弧をつけるのだとしたら、配列参照も四則演算より複雑なので
array[index]ではなく(array[index])と書くべきなのだろう。関係演算も四則演算より複雑なので当然にして、
a > bではなく(a > b)と書くことになるだろう。従って、while (array[index] > 0) function();と書く代わりに
while (((array[index]) > 0)) (function(()));と書くわけだな。
646デフォルトの名無しさん:2009/10/15(木) 18:26:38
>>645
まさにお前みたいなのを優秀なアホって言うんだよ
プロジェクト全体にとって危険因子でしかない
647デフォルトの名無しさん:2009/10/15(木) 18:27:13
> while (((array[index]) > 0)) (function(()));と書くわけだな。

((((;゜Д゜))) っぽいな
648デフォルトの名無しさん:2009/10/15(木) 18:30:56
('a');
649デフォルトの名無しさん:2009/10/15(木) 18:36:36
>>646
ほめてくれてありがとう。
650デフォルトの名無しさん:2009/10/15(木) 18:36:39
('_')==y--;
651デフォルトの名無しさん:2009/10/15(木) 18:39:12
最近のGCCでは&&と||が連続で使われていると警告出すけどな。オプション次第だったかもしれんが。
これぐらいほっといてほしいよ。

expression1 || expression2 && expression3 // <-- Warning
652デフォルトの名無しさん:2009/10/15(木) 18:39:21
( ;'e')
653デフォルトの名無しさん:2009/10/15(木) 18:43:29
>>607,630
ありがとう。出来るだけ()つけるようにします。

もう一つ質問なんですが、enumのint昇格って
ビット数は必ず保持されるものなんでしょうか?

unsigned int a = 0xFFFF;
signed char b = 0xFF;
enum eNUM { c = 0xFF };
const char d = 0xFF;
unsigned int result_b = a & b; //0xFFFF
unsigned int result_c = a & c; //0x00FF << これがコンパイラ依存なのか知りたい
unsigned int result_d = a & d; //0xFFFF
654デフォルトの名無しさん:2009/10/15(木) 18:49:31
&の式の左右辺がint型として評価されるから、そう
655デフォルトの名無しさん:2009/10/15(木) 18:51:49
そもそもenumを他の型と合わせて使うとenumの利点が失われる件
656デフォルトの名無しさん:2009/10/15(木) 19:13:39
>>645
lisp 、いや、なんでもない。
657デフォルトの名無しさん:2009/10/15(木) 19:42:13
>>651
expression1 || expression2 && expression3
だとどういう挙動になるの?
658デフォルトの名無しさん:2009/10/15(木) 19:45:39
そもそも>>603の例だと優先順位迷いようがなくね
659デフォルトの名無しさん:2009/10/15(木) 19:48:46
>>653
もともとcはintだから整数の昇格は関係ない。
result_bとresult_cは常に同じ結果で、result_dだけが環境依存
660デフォルトの名無しさん:2009/10/15(木) 19:51:00
>>653
signed char b = 0xFF; // 未定義
const char d = 0xFF; // charがsingedな場合、未定義
661デフォルトの名無しさん:2009/10/15(木) 19:55:26
>>657
expression2もしくはexpression3が評価され、falseなら次にexpression1が評価され式全体の評価が終わり、
trueなら次にexpression2とexpression3で前回評価しなかった方が評価され、falseなら次にexpression1が評価され終わり、trueなら式全体の評価が終わる。
662デフォルトの名無しさん:2009/10/15(木) 19:55:45
>>657
コンパイル時の警告メッセージのこと?

-Wallオプション付けたら、

「hoge.cpp:XX: 警告: || と共に使われる && の周りでは括弧をつけることをお勧めします」

こんなのが出る。
663デフォルトの名無しさん:2009/10/15(木) 20:01:45
たとえ括弧が冗長でも、(a>b)&&(b>c)とか、*(a[b])とか書きたいし
664デフォルトの名無しさん:2009/10/15(木) 20:02:58
どんだけ読みづらくすれば気が済むんだよ
665デフォルトの名無しさん:2009/10/15(木) 20:06:45

読みやすい書き方を教えてくれ
666デフォルトの名無しさん:2009/10/15(木) 20:24:45
設計・コードレイアウト・命名などに関する良書を読むことが一番の近道だよ
if (true){
}

if (true)
{
}
のどちらを選択すべきかを数十ページに渡って解説しているような良書を読めば自ずと設計の何たるかが分かってくる
667デフォルトの名無しさん:2009/10/15(木) 20:30:24
その良書とやらはどこのケツ拭く紙だ
668デフォルトの名無しさん:2009/10/15(木) 20:31:21
>>663-665
>>663 の例はその括弧付けで良いと思うけど。
俺は怠惰だからこう書くかはわからんが、
そう書いた人を褒める事はあっても批判はしないな。
669デフォルトの名無しさん:2009/10/15(木) 20:34:27
(a>b)&&(b>c)はさすがに間違えようがないと思うけど
脳内パーサが a>(b&&b)>c と判断するような人は謎の病気の疑いがある
670デフォルトの名無しさん:2009/10/15(木) 20:35:37
こんな風に書くなよ。頼むから。

hoge+piyo * fuga+hanya
671デフォルトの名無しさん:2009/10/15(木) 20:39:23
>>667
このどちらが正しいかって意味じゃないんだよ
でもお前らだって実際のコードを書く以上
何らかの判断基準があってこのどちらかを実際に採用しているわけだろ?
その結論に至る過程がとても重要なんだよ特にC++という言語にとってはね
672デフォルトの名無しさん:2009/10/15(木) 20:41:50
ねえよそんなもん

大事なのはスタイルを選ぶ過程じゃなくて一度選んだスタイルを使い続けることだ
普通の良書にはそう書いてあるはず
673デフォルトの名無しさん:2009/10/15(木) 20:43:37
実在のコードから一例を。
--
return
((a * ya[klo]) +
(b * ya[khi]) +
(((((a * a * a - a) * y2a[klo]) +
((b * b * b - b) * y2a[khi])) *
(h * h)) / 6.0));
--
まぁ、書き換えても読み難いけどね。
--
return a * ya[klo] + b * ya[khi] +
((a * a * a - a) * y2a[klo] + (b * b * b - b) * y2a[khi]) * h * h / 6.0;
--
674デフォルトの名無しさん:2009/10/15(木) 20:46:48
>>673
まあブッチャケこういうのは、括弧がどうこう以前に一行で書くなボケと言いたくなるな俺は。
675デフォルトの名無しさん:2009/10/15(木) 20:49:25
{
int lo = a * ya[klo];
int hi = b * ya[khi];
double y2 = (a * a * a - a) * y2a[klo] + (b * b * b - b) * y2a[khi]
return lo + hi + y2 * h * h / 6.0;
}
とかにしろと
項ごとにそれぞれなんか意味があるんだろ?

あと(a * a * a - a)は(a * (a * a - 1))にするべき
676デフォルトの名無しさん:2009/10/15(木) 20:52:40
長い式は誤差が不安
677デフォルトの名無しさん:2009/10/15(木) 21:05:37
const 付けようぜ
678デフォルトの名無しさん:2009/10/15(木) 21:07:57
>>661
そなの?
1が2,3よりも先に評価されそうなもんなのに、そうなっちゃうのか
679デフォルトの名無しさん:2009/10/15(木) 21:10:16
>>657
>>661-662
ええと、演算子の優先順位が
&&の方が||より上であるということでしょうか?
680デフォルトの名無しさん:2009/10/15(木) 21:10:57
>>678
661は間違ってる
expression1 || (expression2 && expression3)

評価される順序は1,2,3。ただし短絡評価
681679:2009/10/15(木) 21:11:08
>>679
それに短絡評価であればいいのでしょうか?
682デフォルトの名無しさん:2009/10/15(木) 21:13:25
||と&&のオペランドは常に左右の順に評価されるんだよ
683デフォルトの名無しさん:2009/10/15(木) 21:14:16
&&の方が優先順位が高いからexpression2が最初だよ
684デフォルトの名無しさん:2009/10/15(木) 21:27:02
        ____
        /     \    
     /   ⌒  ⌒ \   何言ってんだこいつ
   /    (●)  (●) \     
    |   、" ゙)(__人__)"  )    ___________
   \      。` ⌒゚:j´ ,/ j゙~~| | |             |
__/          \  |__| | |             |
| | /   ,              \n||  | |             |
| | /   /         r.  ( こ) | |             |
| | | ⌒ ーnnn        |\ (⊆ソ .|_|___________|
 ̄ \__、("二) ̄ ̄ ̄ ̄ ̄l二二l二二  _|_|__|_
685デフォルトの名無しさん:2009/10/15(木) 21:29:31
結合順位と評価順には何も関係がないんだが
686678:2009/10/15(木) 21:30:15
だよね。びっくりした。
687デフォルトの名無しさん:2009/10/15(木) 21:31:33
expression1の評価にexpression2 と expression3は影響されないし
expression2 と expression3を評価せずとも expression1 が評価されて真だった時点で終了できるし

で、評価順は1,2,3
688デフォルトの名無しさん:2009/10/15(木) 21:43:59
実験して確かめたらすぐですけどね
689デフォルトの名無しさん:2009/10/15(木) 21:51:47
こういう場合は実験で確かめろは危険だと思うな。俺のコンパイラではこうだから、
そうなんだ、で痛い目に合うことある。この場合に限ればちゃんとルールが
決まってるし、間違ってるコンパイラは無いと思うが。
ただ、そこまでわかってる人なら知ってるだろうし、ルールすぐ見つけられるだろう。
690デフォルトの名無しさん:2009/10/15(木) 21:58:15
待て待て
expression1 + expression2 * expression3 なら
普通はexpression2が最初だろ
つまりそういうこと
691デフォルトの名無しさん:2009/10/15(木) 22:01:03
>>690
それは評価順序定まってないだろ
692デフォルトの名無しさん:2009/10/15(木) 22:02:32
決まってないけど、レジスタの割り当て考えたら2か3を先にやるに決まってるだろ
まともなコンパイラなら
693デフォルトの名無しさん:2009/10/15(木) 22:02:51
>>690
1-3-2の順でもなんら問題ない。
つまりはそういうこと。
694デフォルトの名無しさん:2009/10/15(木) 22:08:29
>>692
VCとICCともに123でした。まともじゃないらしいです。
695デフォルトの名無しさん:2009/10/15(木) 22:10:42
予測分岐って知ってるか?
696デフォルトの名無しさん:2009/10/15(木) 22:11:52
分岐予測なら知ってる。
697デフォルトの名無しさん:2009/10/15(木) 22:14:14
どっちでもいいよ

知ってるなら見かけ上1-2-3の順であることなど大した問題ではないとわかるはずだ
698デフォルトの名無しさん:2009/10/15(木) 22:23:50
評価順は大事だよ。
class fuga
{
int a;
public:
fuga()
:a(1)
{
}
int hoge()
{
return a++;
}
};

int main(int argc, _TCHAR* argv[])
{
fuga b;
cout<<b.hoge()+b.hoge()*b.hoge();
}
699デフォルトの名無しさん:2009/10/15(木) 22:30:56
VCとICCでは7になるな。
700デフォルトの名無しさん:2009/10/15(木) 22:43:54
expression1 + expression2 * expression3


優先順位の高い演算子が結合規則に従って先に評価されるので
*演算子が先に評価され、*演算子は左結合なので、exp2, exp3の順で評価されて演算。
次に、+演算子も左結合なので、exp1と(exp2*exp3)の結果が評価されて演算。

参考:
http://msdn.microsoft.com/ja-jp/library/2bxt6kc4(VS.100).aspx


間違ってるかも知れない・・・
701デフォルトの名無しさん:2009/10/15(木) 22:44:45
>>698
これ未定義だよな
702デフォルトの名無しさん:2009/10/15(木) 22:46:09
うん、だから避けないといけない。
703デフォルトの名無しさん:2009/10/15(木) 22:54:49
そういう意味で評価順が大事になるようなケースは>>698
みたいなコードは書かない。
704デフォルトの名無しさん:2009/10/15(木) 22:58:53
>>700
あらかじめ評価した結果を結合する順序って考えればいいんじゃないかな。
705デフォルトの名無しさん:2009/10/15(木) 22:59:47
規格でオペランドの評価順が決められているのは以下の3つのケースだけでーす。

1. &&の左オペランドがtrueの時、左→右
2. ||の左オペランドがfalseの時、左→右
3. ?:の条件がtrueの時、条件→左、条件がfalseの時、条件→右

なので、明示的に評価順を決めたいときは
一時オブジェクトを生成せよとされています。

規格票の該当番号をコピペするのは
誰かがやってくれマース。
706デフォルトの名無しさん:2009/10/15(木) 23:01:05
論理演算子が例外的に短絡評価されるだけで
演算子の優先順位と評価順序は無関係のはず。
expression1 + expression2 * expression3とかいたとき
(expression1 + expression2) * expression3ではなくexpression1 + (expression2 * expression3)
となる以上の意味はない。

k=e3; j=e2; i=e1; i+j*k;
となる可能性もある。
707デフォルトの名無しさん:2009/10/15(木) 23:09:14
>>705
志村カンマ演算子カンマ演算子
708デフォルトの名無しさん:2009/10/15(木) 23:12:19
int a = 0;
cout << ++a << ++a << ++a << ++a << ++a << endl;
709デフォルトの名無しさん:2009/10/15(木) 23:30:04
>>708
それは未定義
710デフォルトの名無しさん:2009/10/15(木) 23:37:45
これはアリ?
cout <<0,++a << 0,++a << 0,++a << 0,++a << 0,++a;
711デフォルトの名無しさん:2009/10/15(木) 23:39:02
アリだげどすごく無意味
712デフォルトの名無しさん:2009/10/15(木) 23:40:10
すまんぜんぜんでたらめだった。訂正。これはアリか?
cout <<(0,++a) << (0,++a) << (0,++a) << (0,++a) << (0,++a)<<endl;
713デフォルトの名無しさん:2009/10/15(木) 23:43:00
>>712
未定義
714デフォルトの名無しさん:2009/10/15(木) 23:43:25
>>712
未定義
715デフォルトの名無しさん:2009/10/15(木) 23:43:46
>>712
川端丸太町
716デフォルトの名無しさん:2009/10/16(金) 00:05:46
だれにも理解できないような奇抜なC++を書けるように日々頑張ります!!
717デフォルトの名無しさん:2009/10/16(金) 00:13:28
奇抜なコード書きたいなら Obfuscated code contest でも見てきたら。
ttp://www.ioccc.org/years.html
718デフォルトの名無しさん:2009/10/16(金) 00:15:46
>>717
なんじゃこりゃ!!
だめだ笑いが止まらん
719デフォルトの名無しさん:2009/10/16(金) 00:20:28
#include <iostream>

int main()
{
std::cout << "Hello, C++" << std::endl;
}

これだけでも出場資格ありそうだな
720デフォルトの名無しさん:2009/10/16(金) 00:38:03
迷路ワロタwww
721デフォルトの名無しさん:2009/10/16(金) 04:38:38
>>701
いいえ。不定の動作であって未定義の動作ではありません。
http://www.kouno.jp/home/c_faq/c11.html#33
722デフォルトの名無しさん:2009/10/16(金) 05:04:56
俺には未定義と書いてあるようにしか読めない…
723デフォルトの名無しさん:2009/10/16(金) 05:05:39
ああそうか、たしかに未定義では無いね
普段さらっと避けてることだから、定期的な再確認をしとかないと忘れてしまうなぁ
ありがとん
724デフォルトの名無しさん:2009/10/16(金) 05:37:14
このスレって
>>661を筆頭とする無能な解答者が多くって
。。。
725デフォルトの名無しさん:2009/10/16(金) 05:40:32
間違った結論のまま終わらなきゃ問題ない
726デフォルトの名無しさん:2009/10/16(金) 05:43:11
>>724
お前みたいに一々煽る奴が居ないのが一番いいんだよ
いい加減にしろ
727デフォルトの名無しさん:2009/10/16(金) 10:02:27
一度でいいから >>717 のサイトにあるようなプログラムで客先に納品してみたい
728デフォルトの名無しさん:2009/10/16(金) 13:42:06
以下のコードを書いたのですが、
template class A<int>;と書くところをtemplate A<int>;
と書いてしまったんですけど、VC9 でコンパイル通ります。
なぜですか?
g++4.4.1 ではコンパイルエラーです。

template<class T>
struct A{};

template A<int>; // 明示的なインスタンス化のつもりで書いたがtypo
729デフォルトの名無しさん:2009/10/16(金) 14:13:46
◆宣伝、広告◆
腕に自信のあるプログラマは、以下のコンピュータ大富豪大会に参加しましょう。

ひろゆき杯コンピュータ大富豪大会
http://uecda.nishino-lab.jp/2009/


○What's UECda?

大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひとつでしょう。
このゲームは、1960年頃に日本で生まれたと言われており、海外では、ほとんどプレイされていないようです。
本大会は、その日本固有の人気トランプ・ゲームである大貧民を、人が直接プレイするのではなく、
プレイするコンピュータ・プログラムを作成して持ち寄り、対戦させる大会です。

主催

電気通信大学
730デフォルトの名無しさん:2009/10/16(金) 15:11:24
C#より、VB.NETやれよ。
楽しいぞ。
731デフォルトの名無しさん:2009/10/16(金) 15:15:08
欠陥言語C#の話題はスレ違いなんで自粛してください
732デフォルトの名無しさん:2009/10/16(金) 15:54:58
C#にtypedefが追加されたらずいぶん改善されるのにな。
733デフォルトの名無しさん:2009/10/16(金) 17:03:59
スレ違いだが、参考まで。
>>732
つ[using 別名 = 型];
734デフォルトの名無しさん:2009/10/16(金) 19:31:18
スレタイ読め
二度と来るな
735653:2009/10/16(金) 21:32:34
符号有無のキャストは奥が深いんですね・・。
enumはintと覚えておきます。
また優先順位の質問ですが、スレを見てて()の重要性がわかった気がしました。

いろいろ情報ありがとうございました。
736デフォルトの名無しさん:2009/10/16(金) 22:29:02
すみません
インテル Parallel Studio とインテル C++ コンパイラは別物なんですか。
ここに書いてあるインテル のプロファイラをしたいのですが、C++ コンパイラ評価版では出来ないみたいです。

http://sourceforge.jp/magazine/09/05/25/0921234/3
737736:2009/10/16(金) 22:31:14
プロファイラとC++コンパイラが一緒にやっているはないですか。
738デフォルトの名無しさん:2009/10/16(金) 22:44:27
あなたの言語は日本語ないですか?
739736:2009/10/16(金) 23:17:37
教えて
740デフォルトの名無しさん:2009/10/16(金) 23:28:59
>>739 こちら二どーぞ
インテルC++コンパイラ9.0発表!
http://pc12.2ch.net/test/read.cgi/tech/1118850896/
741デフォルトの名無しさん:2009/10/16(金) 23:39:35
thx
742デフォルトの名無しさん:2009/10/18(日) 12:35:29
const bool x=foo();
const bool y=bar();

このとき
if(x||y){〜}

if(y||x){〜}
はより効率の良いコードに最適化されたりしますか?
743デフォルトの名無しさん:2009/10/18(日) 12:40:36
意味不明。
評価しやすいほうが前方にあれば速度は速くなると思う。
744742:2009/10/18(日) 12:45:17
>>743
重大なカンチガイをしていました。
済みません。
ありがとうございました。
745デフォルトの名無しさん:2009/10/18(日) 13:30:43
x、yのうち真になる確率が高いほうを前にしたほうが効率が良くなるんじゃないか。
どうせほとんど変わらないだろうけど。
746デフォルトの名無しさん:2009/10/18(日) 13:32:43
つーか、最適化なんて環境依存もいいとこなんで。C++みたいに環境依存の
多い言語だと何とも答えようがないとしか。
747デフォルトの名無しさん:2009/10/18(日) 13:38:51
これは最適化という域ではなく、アルゴリズムの改善だろ
748デフォルトの名無しさん:2009/10/18(日) 14:04:28
C++は標準ライブラリがマクロを多用する欠陥言語
ただ1つのintに対してM$は狂ったように無数の別名を与え続けた
1つの言語の世界の中では移植性や汎用性を高める為の技術のはずが
複数の言語の世界にまたがるとただの障壁としかならずまさに本末転倒
C++からCLIを利用する時はすんなりと行けるが
C#からWin32APIを呼び出すとその欠陥っぷりが如実に現れることが全てを証明している
こんなウンコC++に未来はない
みんな大人しくC#に移行しよう
749デフォルトの名無しさん:2009/10/18(日) 14:07:13
intにそんな別名ってあったっけ?
750デフォルトの名無しさん:2009/10/18(日) 14:10:04
>>748
MFCもwindows.hもC++の標準ライブラリじゃないから。
751デフォルトの名無しさん:2009/10/18(日) 14:10:14
C#は全部System.Objectの派生だろ。
752デフォルトの名無しさん:2009/10/18(日) 14:15:24
>>748
C++を知らないヤツが知ったかぶっちゃって恥ずかしいwwwwwwwww
753デフォルトの名無しさん:2009/10/18(日) 16:43:31
>>752
確かに君と同レベルだ
754デフォルトの名無しさん:2009/10/18(日) 16:45:39
必死の切り返しw
755デフォルトの名無しさん:2009/10/18(日) 16:57:06
>>753
切り返せてねぇけどなww
756デフォルトの名無しさん:2009/10/18(日) 17:29:14
> C++からCLIを利用する時はすんなりと行けるが
> C#からWin32APIを呼び出すとその欠陥っぷりが如実に現れる
ならC++使いなよっておもうんだが
757デフォルトの名無しさん:2009/10/18(日) 17:35:03
WindowsのAPIはたしかにアレだけど、あんなの決めたのM$なんで、C++のせいにしないで
ほしいわ。というか、ほとんどC的な使い方しかしてない。当時はC++も今より
仕様が未熟だったし、仕方ないところもある。

typedefは一つに移植性の向上という目的があるからするんで。そこんとこよろしく。
758デフォルトの名無しさん:2009/10/18(日) 17:38:48
>>748
> C++は標準ライブラリがマクロを多用する欠陥言語
> ただ1つのintに対してM$は狂ったように無数の別名を与え続けた
この2つを結びつけるあたり
お前の頭が欠陥だとしか。
759デフォルトの名無しさん:2009/10/18(日) 18:28:39
WTL使えよ
760デフォルトの名無しさん:2009/10/18(日) 19:27:38
まあ、整数型のtypedefの正体を知らなきゃならない場面が多いのは確か
整数関係は意外と罠多いからなぁ
761デフォルトの名無しさん:2009/10/18(日) 19:28:49
WTLのいい本教えてください。マジで。orz
762デフォルトの名無しさん:2009/10/18(日) 19:34:21
これならどうなんですか?
(((cout <<(0,++a) ) << (0,++a) ) << (0,++a) ) << endl;
763デフォルトの名無しさん:2009/10/18(日) 19:43:24
>>762
何の話をしているのだい?
764デフォルトの名無しさん:2009/10/18(日) 19:44:02
だから結合順位と評価順位は別だと何度言ったらわかるのだ。
ひとつの文である限り、環境依存。
765デフォルトの名無しさん:2009/10/18(日) 19:50:12
>>762
未定義の動作じゃないか?
766765:2009/10/18(日) 19:51:39
>>762-764
環境依存ではなく
未定義の動作じゃないか?

鼻から悪魔が出るよ。
767デフォルトの名無しさん:2009/10/18(日) 19:54:51
>>765-766
カンマ演算子で区切ってあるから、未定義の動作にはならんのだろう。
>>721 の「不定の動作」になるんじゃないかな?
768デフォルトの名無しさん:2009/10/18(日) 20:07:15
> 実装により定義された(implementation-defined)動作、不定の (unspecified)動作、未定義の(undefined)動作を区別することを世の 中では重視するようだ。違いは?>
> A:
>簡潔に説明する。実装により定義された動作とは、どう振る舞うかを実装が選択して、その振る舞いを文書にすることを意味する。
>不定の動作とは、どう振る舞うかを実装が選択しなければならないが文書にする必要はないことを意味する。
>未定義とは、本当にどんなことがおこっても不思議ではないことを意味する。
>どの場合にも規格は、必要条件を課していない。
>最初の2つの動作について規格は時々ありそうな振る舞いの集合について少し提案している(その集合から選択しなければならないかもしれない)。
>規格は未定義の動作に直面したときのコンパイラの動作について何も必要条件を設定していないことに注意すること。
> だからコンパイラは本当に何をしてもいいことになる。
769デフォルトの名無しさん:2009/10/18(日) 20:15:26
> 不定の (unspecified)動作

アホ
770デフォルトの名無しさん:2009/10/18(日) 20:15:26
const std::string name[] = {"aaa" , "bbb" , "ccc" , "ddd" , "eee" , "fff"};
このとき、
配列nameの要素数を取得するにはどうすれば良いでしょうか?
771デフォルトの名無しさん:2009/10/18(日) 20:22:10
>>770
booost::sizeを使う

#include <boost/range/size.hpp>
#include <cassert>

int main(int argc, char *argv[])
{
const std::string name[] = {"aaa" , "bbb" , "ccc" , "ddd" , "eee" , "fff"};
assert( boost::size(name) == 6 );
return 0;
}
772デフォルトの名無しさん:2009/10/18(日) 20:22:57
>>771
ありがとうございます。
それで行きます、
773デフォルトの名無しさん:2009/10/18(日) 20:35:39
>>769
未規定の動作、ならいいか?
774デフォルトの名無しさん:2009/10/18(日) 20:41:04
>>773
そゆこと

>>771
え、マクロ使わずにどうやって?
775デフォルトの名無しさん:2009/10/18(日) 20:53:46
>>774
template<class T,int N>
int size(T a[N])
{
776デフォルトの名無しさん:2009/10/18(日) 20:55:15
>>775 送信されちゃった
return sizeof(T)*N;
}
確認してないけどこんな感じなのかな?
777デフォルトの名無しさん:2009/10/18(日) 21:02:36
要素数を知りたいならNを返すだけでいいだろう
778デフォルトの名無しさん:2009/10/18(日) 21:03:02
>>775
なるほど、その手があったか
thx
779デフォルトの名無しさん:2009/10/18(日) 21:05:33
>>777
しまった、後送信して動転してしまった。
780デフォルトの名無しさん:2009/10/18(日) 21:06:06
「マクロをつかわずにどうやって」って、テンプレートでやると難しいの?

781デフォルトの名無しさん:2009/10/18(日) 21:18:53
実際boost::sizeの実装はラッパにラッパを重ねて見た目より多少面倒なことになってる
で、最終的に定数(sizeof(なんか)/sizeof(なんか) + 配列の先頭アドレス)と定数(配列の先頭アドレス)になって
コンパイラによる展開、除去ののち定数埋め込みになる…のかな?
782デフォルトの名無しさん:2009/10/18(日) 21:23:54
>>781
引数が配列とは限らないからいろいろやってるんだとは思うけど。

たとえばコンテナが渡された場合など、sizeメンバー関数を持つオブジェクトだった場合の切り替えってどうやってるんだろう?
783デフォルトの名無しさん:2009/10/18(日) 21:28:50
C言語の範囲で、バイナリ文字列を画面に出力できるんですか?
stringだと出来ますが。
784デフォルトの名無しさん:2009/10/18(日) 21:30:07
スレチ
785デフォルトの名無しさん:2009/10/18(日) 21:30:09
char型を一字ずつやれば出来そうですが。ほかにないですか、%sだと\0で止まると思います。
786デフォルトの名無しさん:2009/10/18(日) 21:31:03
type_traitsってやつですな

しかし特定の名前のメンバ関数を持っているかどうかの判定は環境依存しない方法でできるんだろうか
787デフォルトの名無しさん:2009/10/18(日) 21:32:33
>>784
c++でもいいです。
char *p が1MBあったとして、それをstringにコピーせず=別メモリの確保無し
でまるまる画面に出す方法ありますか。
788デフォルトの名無しさん:2009/10/18(日) 21:34:01
>>787
forで1バイトずつ処理してください。
789デフォルトの名無しさん:2009/10/18(日) 21:38:01
それしかないんですか。トンクス
790デフォルトの名無しさん:2009/10/18(日) 21:39:31
cout << string は一括で出力できる気がしてます…
これを真似する方法でできないでしょうか。・
791デフォルトの名無しさん:2009/10/18(日) 21:40:27
fwrite
792デフォルトの名無しさん:2009/10/18(日) 21:40:29
std::copyとstreambuf_iteratorでどうにかできそうな気がせんでもない
793デフォルトの名無しさん:2009/10/18(日) 21:44:32
最初からvectorとかstreambufに格納しておけば、後から何とでもなるのに。
794デフォルトの名無しさん:2009/10/18(日) 21:44:54
わかりました。ファイルポインタの代わりに
stdoutにしてバイナリ出力したらいいんですね。
サンクス
795デフォルトの名無しさん:2009/10/18(日) 21:47:36
>>794
あと、耳栓だな。
796デフォルトの名無しさん:2009/10/18(日) 21:54:26
>>786
C++ の流儀では、それはコンパイルエラーで対応する範疇のことで
どうしてもランタイムでっていう場合はインターフェースと dynamic_cast だろ
797デフォルトの名無しさん:2009/10/18(日) 22:14:25
icu::UnicodeStringなどは、stringと違って
実体持たずにポインタ保持してるみたいですね。
char * strをUnicodeStringに代入してから
空きができたとおもい別用途で使用したらデータ消えてるみたいです。
798デフォルトの名無しさん:2009/10/18(日) 22:31:36
コンセプトがあれば786なんて楽勝だったのにっ!
799797:2009/10/18(日) 22:33:07
すみません。別の原因でした。コピー作られてるようです。7
800デフォルトの名無しさん:2009/10/19(月) 00:15:46
std::basic_ostream<>にもfwriteのように使えるメンバ関数writeがあるぞ。
801デフォルトの名無しさん:2009/10/19(月) 00:25:10
>>786
C++0xならできる
802デフォルトの名無しさん:2009/10/20(火) 04:03:03
Xeno091017 正式版
http://koreawatcher.at.infoseek.co.jp/janexeno.htm
・正式版として最初のリリース。
・Jane終了時の挙動のみ091015試作品から変更された。
───────────────────────
予告どおり、正式版をリリースしました。×ボタンのツールチップ
ヒントに関して、真魚のソースを参考にして修正を試みました。
JaneNidaの開発は事実上終了です。2chの仕様変更などで
対応するかもしれません。
803デフォルトの名無しさん:2009/10/20(火) 04:23:57
宣伝厨死ね
804デフォルトの名無しさん:2009/10/20(火) 05:24:23
>>802
確か2chでは宣伝には相応の対価を払わされるんだよな。
それは非営利目的でも、だ。
805デフォルトの名無しさん:2009/10/20(火) 05:30:24
>>802
ttp://pc12.2ch.net/test/read.cgi/tech/1254829314/
こいつ、ここでも宣伝していやがる。
こりゃあ通報かな。
806デフォルトの名無しさん:2009/10/20(火) 05:50:12
C/C++の宿題片付けます 131代目
http://pc12.2ch.net/test/read.cgi/tech/1255709298/102

ここもね。
807デフォルトの名無しさん:2009/10/20(火) 06:41:34
なぜDelphi製のJaneの宣伝をC/C++関連スレに爆撃したんだ
808デフォルトの名無しさん:2009/10/20(火) 07:42:15
JaneってDelphiなの?
809デフォルトの名無しさん:2009/10/20(火) 09:43:18
さすがに違うだろ…Delphiでこんな良いソフト作れるわけがない。たぶんHSPだな。
810デフォルトの名無しさん:2009/10/20(火) 12:52:08
JaneがDelphiなのではなく「Delphi製のJane」
811デフォルトの名無しさん:2009/10/20(火) 20:46:19
JaneViewは一部C++だったかな
812デフォルトの名無しさん:2009/10/21(水) 03:21:28
派生クラスの型定義を基底クラスで使いたくて、

template<class T> struct A {
  typedef typename T::b_type value_type; // error
  void test() { T::b_type  n; } // ok
};
struct B : A<B> { typedef int b_type; };

みたいにしたら、
vc2008eeとgccに'b_typeはBのメンバじゃない'って怒られた。
結局、b_typeで渡すのはあきらめて、Aにテンプレート引数を追加して、それで渡すことにしたんだけど、
これはどうしようもない?
813デフォルトの名無しさん:2009/10/21(水) 03:23:39
b_typeがA<B>に依存しない型かどうか分からないからな。
814デフォルトの名無しさん:2009/10/21(水) 07:53:49
環境依存だが

template<class T> struct A {
 __if_exists(T::b_type){ typedef typename T::b_type value_type;}
 __if_not_exists(T::b_type){ int value_type;}
 void test() { value_type  n; }
}; 
struct B : A<B> { typedef int b_type; }; 
struct C : A<C> {};
815814:2009/10/21(水) 07:59:59
ごめん、どうやらこのやり方は間違いのよう。
__if_existsには型は渡せなかった。
816デフォルトの名無しさん:2009/10/21(水) 18:16:34
しかし.NET便利すぎだな
C++用にアンマネージドの.NET3.0も作って欲しいくらい
817デフォルトの名無しさん:2009/10/21(水) 20:59:58
.NETw
818デフォルトの名無しさん:2009/10/21(水) 22:04:56
>>816 C++に比べて具体的にどういうところが便利なのかい?
819デフォルトの名無しさん:2009/10/21(水) 22:09:04
【合法】みんなズッキーニでヘヴン状態しようぜ!!
http://namidame.2ch.net/test/read.cgi/yasai/1223375038/
820812:2009/10/21(水) 22:34:31
>>813-815
ありがとう。
やっぱテンプレート引数で渡すしかないか。
821デフォルトの名無しさん:2009/10/22(木) 03:04:45
C++に未来は無い
C++は近い将来に必ず滅ぶ
822デフォルトの名無しさん:2009/10/22(木) 04:19:54
C++は滅びぬ。
何度でも蘇るさ。
それがプログラマの夢だからだ。
823デフォルトの名無しさん:2009/10/22(木) 05:29:17
const string class::STR1[2] = {"A","B"};
const string class::STR2("C");

これを関数内でstatic string str3(STR1[2]);
とやるとCが表示されるんだが…なぜ?
こういうやり方はしないほうがいい?char*ですべき?
824デフォルトの名無しさん:2009/10/22(木) 06:36:36
STR1の要素は2なんだから添え字は1までだろう
825デフォルトの名無しさん:2009/10/22(木) 07:15:43
まぁそうなんだが、なぜか[2]でも使えるんだよなぁ
826デフォルトの名無しさん:2009/10/22(木) 07:35:55
使えてないだろ馬鹿かこいつは
827デフォルトの名無しさん:2009/10/22(木) 07:44:56
単に範囲外へのアクセスだから未定義。何が起きてもおかしくない。論外。
828デフォルトの名無しさん:2009/10/22(木) 08:22:02
相談です

メインのクラスに巨大な配列(int型の1000*1000*1000ぐらいの配列)を定義していて
ある操作AをするためにクラスAにその配列全体の中身をいちいちクラスAのメンバ配列にコピーして結果をまたメインクラスにコピーしなおすということをしているのですが
さらにその後メインクラス内で別の操作BをするためにクラスBを作りました
この操作をするためにはまたクラスBのメンバ配列にメインクラスの配列をコピーするようなことをしなくてはならないのですが
毎回これをやってると処理が重くなってしまいます

そこでメインのクラスからもクラスAからもクラスBからもアクセスできるような配列を定義したいのですがどうするのがいいのでしょうか?
ちなみに巨大な配列をグローバル配列として定義してみたのですがうまくいきません
(VCのMFCを使っています。グローバル配列はstdaf.hで定義しようとしました。全てのクラスの処理とクラス定義はそれぞれc++ファイルとヘッダファイルを作り分けています)

またそういったどのクラスからもアクセスできる配列っていうのは作ることができるんでしょうか?
829デフォルトの名無しさん:2009/10/22(木) 09:18:51
他のインスタンスから直接触らせて構わないならポインタか参照を投げればいい

つーかクラスとインスタンスの呼び分けをしてくれないと何が何だか分からん
「メインのクラス」の意味がまず分からん
830デフォルトの名無しさん:2009/10/22(木) 09:21:23
stdafx.hにグローバル配列を定義という時点でかなり初歩的な問題があるな
ここでいちいち教えるにはあまりにも長すぎるから、どっかにいい解説無いかね
831デフォルトの名無しさん:2009/10/22(木) 09:35:14
>>829
すいません
書き直してみます

mainインスタンスに巨大な配列(int型の1000*1000*1000ぐらいの配列)を定義していて
ある操作Aを行うクラスAのインスタンスAをmainインタンスで宣言し、mainの配列全体の中身をいちいちインスタンスAのメンバ配列にコピーして結果をまたmainにコピーしなおすということをしているのですが
さらにその後main内で別の操作BをするクラスBのインスタンスBを作りました
この操作をするためにはまたインスタンスBのメンバ配列にmainの配列をコピーするようなことをしなくてはならないのですが
毎回これをやってると処理が重くなってしまいます

そこでmainのインスタンスからも、その中で宣言したインスタンスA・インスタンスBからもアクセスできるような配列を定義したいのですがどうするのがいいのでしょうか?
ちなみに巨大な配列をグローバル配列として定義してみたのですがうまくいきません
(VCのMFCを使っています。グローバル配列はstdaf.hで定義しようとしました。全てのクラスの処理とクラス定義はそれぞれc++ファイルとヘッダファイルを作り分けています)

またそういったどのクラスからもアクセスできる配列っていうのは作ることができるんでしょうか?


>>830
プロジェクト全体で使えるグローバル変数の定義ってどこでやればいいんでしょうか?
832デフォルトの名無しさん:2009/10/22(木) 09:46:52
>>831
そんな「巨大な配列」を「グローバル」にして「stdafx.h」に「定義」するって?
もう突っ込みどころしかないんだ。
まさに>>830の2行目なので、できれば成書を読んで基礎理解を深めてほしい。

その質問に対する答えだけほしいなら>>829が1行目で書いてる
833デフォルトの名無しさん:2009/10/22(木) 10:39:10
>>831
うん、まぁ、素直に書き直してくれたのはいいんだが…
クラスとインスタンスの意味がちゃんと理解できてないようにしか見えないっつーか
結局意味分からん…
834デフォルトの名無しさん:2009/10/22(木) 11:16:10
寧ろ余計判らなくなった。
どうやら、最初の方は無意識に補っていたらしい。
835デフォルトの名無しさん:2009/10/22(木) 12:04:00
よし、MFCという単語が出てきた時点でわかったぞ。
つまり、mainクラスとはCWinAppの派生クラスであり、
mainインスタンスとはその唯一の実体、theAppの話だな。
…普通、そういう呼び方はしないが。^^;

それはともかくとして、やっぱり>>829の一行目が答え。
836デフォルトの名無しさん:2009/10/22(木) 20:53:18
hoge fuga(piyo &p);

fuga(piyo());

hoge fuga(piyo *p);

shared_ptr<piyo> foo();

fuga(foo().get());

↑のように一時的な参照タイプの引数を関数に渡した場合、インスタンスの寿命はどこまで保証されるんでしょうか?
837デフォルトの名無しさん:2009/10/22(木) 21:02:57
fugaを呼び出しているステートメントが終わるタイミングでfooの寿命は消える
838デフォルトの名無しさん:2009/10/22(木) 21:34:28
文末まで生きるんですね、安心しました
レスありがとうございました

839デフォルトの名無しさん:2009/10/22(木) 21:39:15
>>836
参照の右辺に一時オブジェクトは置けないよ。

hoge fuga(piyo &p);
fuga(piyo());

も禁止。ポインタにしましょう。
840デフォルトの名無しさん:2009/10/22(木) 21:47:00
hoge fuga(piyo *p);
fuga(&piyo());
ならいいって?
841デフォルトの名無しさん:2009/10/22(木) 22:03:06
すみません。
「Crypt: bitwise not / Password: nYXR-lZml-yZXd-hbGw-1a2c 」から連想されるアプリ(偽装解除ソフト)を探しています
お分かりになる方、いませんでしょうか?
842デフォルトの名無しさん:2009/10/22(木) 22:09:30
スレチ
843デフォルトの名無しさん:2009/10/22(木) 23:31:56
>>839
それを言うならconst参照にしましょうだろ
844デフォルトの名無しさん:2009/10/23(金) 00:30:16
http://codepad.org/GTnYEMYl

↑のような感覚でインターフェースの結合と実装の再利用を実現したいのですが、なにかいい手はないでしょうか?
845デフォルトの名無しさん:2009/10/23(金) 00:34:36
とりあえずvirtualつけろよ
846デフォルトの名無しさん:2009/10/23(金) 02:08:16
const参照でも右辺に変数以外は置けないよ。
VC++は通っちゃうけど。
847デフォルトの名無しさん:2009/10/23(金) 03:02:43
小さい頃は近所の駄目人間おじさんをバカにしてたっけ・・・。
よれよれの紺のビニールジャンパー、べた付いてそのままよりも少なく
見える髪の毛。猫背。生気のない瞳。ただその存在そのものを見下して
たね。将来自分は絶対に出世するんだって何の根拠もなく思ってたね。
小さい頃からの日々の積み重ねが大人になるまで続いてくなんて夢に
も思わなかったよ。中学生の頃通っていた塾の先生が言ってたな。
「俺はあんまり頭良くないから法政にしか行けなかったんだ、ははは。」
クラスのみんなで大笑いしてたっけ。あの内何人が法政以上の大学に
行けたというのだろうね。毎日会社に通って夜遅くまで働いてるお父
さんがいかに大変で偉大かって、やっと分かりました。
転職を繰り返して人に馬鹿にされて初めて分かりました。生きるって
本当に大変。何をやっても後悔が待ってるもんね。特別じゃない。
自分は特別な人間でも何でもないんだって、20代後半になってやっと
分かりました。あの頃、白い眼で見てしまったおじさん、ごめんね。
あなたのぶんまで生きようと思います。
でも、時間が必要だったことだけは分かって欲しいんだ、おじさん。

さようなら、青い鳥★69羽目
http://gimpo.2ch.net/test/read.cgi/news7/1250876574/
848デフォルトの名無しさん:2009/10/23(金) 03:06:55
>>844
>struct impl_ab : public iface_ab, public impl_a, public impl_b
struct impl_ab : public impl_a, public impl_b
iface_abはいらない
849デフォルトの名無しさん:2009/10/23(金) 04:20:26
>>846
VC++で通っちゃうのは非 const 参照を一時オブジェクトで初期化するコードだろ。
const 参照なら一時オブジェクトで初期化できるのが標準。
右辺とか変数以外とか言ってるのもよくわからん。
850デフォルトの名無しさん:2009/10/23(金) 05:21:30
>>846
お前、理解できてなさすぎるww

>>849
> VC++で通っちゃうのは非 const 参照を一時オブジェクトで初期化するコードだろ。
> const 参照なら一時オブジェクトで初期化できるのが標準。
これが全て。
851デフォルトの名無しさん:2009/10/23(金) 06:03:48
C++って参照の参照が現れると未定義の動作になるんでしょうか?
例えば
MyClass foo(const MyClass&){〜};
この時
const MyClass& x
=foo(MyClass());//一時オブジェクトをconst参照で束縛
foo(x);//参照の参照
この動作が未定義になるんでしょうか?
852デフォルトの名無しさん:2009/10/23(金) 06:16:55
Cのコードを再利用してプログラミングしています。
pow関数などで、オーバーロード関数があいまいです
と出るのですが、もちろんキャストしてやるか、powfなどをつかえば
問題はないのですが、できればコードを書き替えずにプリプロセッサなどで
エラーを出さない方法を探しています。
何か良い方法があれば教えてください
853デフォルトの名無しさん:2009/10/23(金) 06:54:43
>>851
ならないよ
てか、参照の参照なんて現れて無いじゃん
(そもそも参照の参照なんて文法上存在しないし)


未定義の動作として有名なのはこれだな

const MyClass& foo(const MyClass& n) { return n; }
const MyClass& x = foo(MyClass());
x->hoge();

一時オブジェクト MyClass() の寿命は x の宣言文のところまでなので、
hoge を呼ぶ時には既に寿命が尽きている
戻り値として返してそれを const 参照に入れてはいるけど、
こういう間接的なルートを通ると寿命は伸びない

この例と >>851 との違いは、戻り値が参照かそうでないか
戻り値がコピーになってると、
そのコピーされた戻り値オブジェクト(引数のオブジェクトとは別物)が
const 参照に束縛されるので問題が無い
854デフォルトの名無しさん:2009/10/23(金) 09:14:24
結局のところ参照引数にコンストラクタ渡すのは×、const参照引数にコンストラクタ渡すのは○ということ?

状態をもっていて呼び出すと状態がかわる関数オブジェクト(乱数とか、ストリームへの参照を持ってるとか)を渡したいときに
func(x, func_obj(a, b));
とかやりたい場合はオーバーヘッドはあきらめて値渡しにする(かconst_cast)しかないんでしょうかね
855デフォルトの名無しさん:2009/10/23(金) 10:02:46
>>854
なんか何言ってるのか分からなくなってきたが、
基本的に関数オブジェクトは値渡しできるように作らなきゃ駄目
内部に状態を持つ場合も注意深くコピーコンストラクタ定義すれば問題ないはず
856デフォルトの名無しさん:2009/10/23(金) 10:50:48
>>850
なんで >>849 の指摘を繰り返したの?
まあ大事なことだけどさ。
857デフォルトの名無しさん:2009/10/23(金) 12:53:00
お前らって本当に頑固な奴らだな
いい加減C++を使うのは止めにしないか?
858デフォルトの名無しさん:2009/10/23(金) 12:55:11
>>857
もはや日常言語なのでそれは無理
859デフォルトの名無しさん:2009/10/23(金) 13:28:35
>>854
「コンストラクタ渡す」って何だ?
860デフォルトの名無しさん:2009/10/23(金) 13:31:59
それくらい脳内変換しろよ
861デフォルトの名無しさん:2009/10/23(金) 13:40:32
C++のやりすぎで柔軟な思考が出来なくなっているんだろう
862デフォルトの名無しさん:2009/10/23(金) 13:59:49
柔軟な思考とぞんざいな思考は紙一重だからなあ
863デフォルトの名無しさん:2009/10/23(金) 14:24:00
ご託を並べていないで
どうすれば生産性の低いC++でも納期を短く出来るのかを考えろよ会社のお荷物どもが
実際にタイムリソースを消費しまくっているだろうが!うちは慈善事業団体じゃねーんだぞ
エンジニアのオナニーに付き合わされるのはもうまっぴらなんだよ!!!
864デフォルトの名無しさん:2009/10/23(金) 14:26:37
>うちは慈善事業団体じゃねーんだぞ
じゃあ、慈善事業団体にしちゃいなよ
865デフォルトの名無しさん:2009/10/23(金) 14:28:37
矛盾も無理もなく確定して変更されることのない仕様を提示してくれ。
866デフォルトの名無しさん:2009/10/23(金) 14:30:36
プログラマでも完璧な仕様作るのは無理ですわ。
867デフォルトの名無しさん:2009/10/23(金) 14:57:03
> どうすれば生産性の低いC++でも納期を短く出来るのかを考えろよ会社のお荷物どもが
うちのチームはJavaチームより遙かに生産性高いよ
Windows組はC#とかつかっているけどJavaチームより出来が悪い
これはWindowsエンジニアでまともなのが少ないからだけどな
868デフォルトの名無しさん:2009/10/23(金) 16:37:00
クラスのprivate変数として初期値を持った配列を定義したいのですが、どうも出来ない様子。
ぐぐると、コンストラクタで初期値を入れるのがおすすめらしいのですが疑問があります。

初期値はどこに持っておけばいいの???
869デフォルトの名無しさん:2009/10/23(金) 17:00:23
>>853
x.hoge();ちゃうんか。
870デフォルトの名無しさん:2009/10/23(金) 17:00:47
どこにでも持っていいよ
871デフォルトの名無しさん:2009/10/23(金) 18:06:43
できないのはポインタの参照だっけ?
872851:2009/10/23(金) 21:34:26
>>853-855
レスが遅れまして大変申し訳ございません。

@> MyClass foo(const MyClass&){〜};
A> const MyClass& x=foo(MyClass());//一時オブジェクトをconst参照で束縛
ここまでは仕様上OKだと思うのですが
B>foo(x);//参照の参照
fooの引数がconst参照となっていますので
x自体がAのようにconst参照であるがゆえに
参照の参照になるのではないかと思ったのです。
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
そもそも私がこれを気にした理由は
letsboost::call_traits
ttp://www.kmonos.net/alang/boost/classes/call_traits.html
ここに
>「参照型への参照型」はC++的にはイリーガル
という記述を見つけたからなのです。

みなさまどうかご指導よろしくお願い申し上げます。
873デフォルトの名無しさん:2009/10/23(金) 21:52:07
template 中で形式的に「参照の参照」が出現した場合、
コンパイルエラーになるってだけでは。
template が絡まない限りは関係ない話。
874デフォルトの名無しさん:2009/10/23(金) 21:58:29
>>873
ああなるほど、そうでしたか。
const MyClass x;
const MyClass& y=x;//参照
const MyClass& z=y;//参照の参照
これが未定義の動作になるのかと思っていました。
(動作するのは偶然で仕様上はダメなのかと思っていました。)

ありがとうございました。
875デフォルトの名無しさん:2009/10/23(金) 21:59:51
>>872
「参照型の参照型」と「参照の参照」を混同してるのが原因
参照型の参照型ってのはポインタでいうとこのT**
T&型の参照型はイリーガルって話。
876872:2009/10/23(金) 22:05:15
>>875
それで理解できました。
template <typename T>
class XX{T&うんぬん}

XX<std::vector &>とかした場合って事ですね。

ありがとうございます。
877デフォルトの名無しさん:2009/10/23(金) 22:31:00
参照は別名、って覚えてからコード見やすくなったわ

int x;

int& r(x); xの別名r
int& rr(r); xの別名であるrの別名rr、つまりxの別名
878デフォルトの名無しさん:2009/10/23(金) 22:54:06
>>877
それだとまずいこともあるぞ。
別名だとすると処理に一歩時間がかかることが
説明できないし。
879デフォルトの名無しさん:2009/10/23(金) 22:58:47
いえ、ただの別名です。
880デフォルトの名無しさん:2009/10/23(金) 23:00:35
>>879
いえ、それは独立参照です。
881デフォルトの名無しさん:2009/10/23(金) 23:08:48
>>878
>>877の書いてる参照なら時間掛からんけどな
実装面で考えると、>>877のようなのは別名だけど、参照渡しはポインタ的なものだな
882デフォルトの名無しさん:2009/10/23(金) 23:12:22
>>881
さらに言うと
現実の実装は別に処理系が好き勝手に決めて良い。
すなわち仕様上は参照渡しがポインタを使って実装されているとは限らない。

883デフォルトの名無しさん:2009/10/24(土) 01:27:08
まあ常識的にはポインタだけどな
もしくは本物を直接見るコードに最適化されるか
884デフォルトの名無しさん:2009/10/24(土) 07:20:11
インライン化されれば間接アクセスは消える可能性が高いな
885デフォルトの名無しさん:2009/10/24(土) 12:46:45
正直.NETって凄いよね
886デフォルトの名無しさん:2009/10/24(土) 13:37:56
>>885
定期的に宣伝してるのか?
具体的にどういうところがC++に比べて凄いのか書いたら?
887デフォルトの名無しさん:2009/10/24(土) 14:03:07
>>885じゃないけど
マイクロソフトはC++よりもC#を推進しているような気がする。
理由の1つ目はVC++を単体売りしなくなったこと。
理由の2つ目は2010でStandardエディションを廃止して
「誰でも簡単にリッチなアプリを作れるライブラリ」であるところのMFC/ATLを
(以前よりも)手に入れにくくしたこと。
理由の3つ目は2008でモバイル開発環境をProfessional以上に限定したこと。
理由の4つ目はC++/CLIとC#を比較したとき、C#の方が.NETの全機能によりスマートに対応していること。

Windows上でのC++による開発は
高度な技術を持つ職業プログラマだけのものへと押し上げて、
残りはすべてC#やVBで吸収(結果的にネイティブから.NETベースのプログラムに)
指定校というむにゃむにゃ。
888デフォルトの名無しさん:2009/10/24(土) 14:04:05
>>885
ええと2ch宣伝は相応の対価を払わされるんだと
何度言えば分かるんだヴォケ!
889デフォルトの名無しさん:2009/10/24(土) 14:18:08
>>887
> >>885じゃないけど

お前が>>885じゃなかろうが何だろうが
スレ違いかつ2ch宣伝厨であることには代わりないんだよ。

何でそれが分からないの?
890デフォルトの名無しさん:2009/10/24(土) 14:20:14
ライブラリがすごいのね
891デフォルトの名無しさん:2009/10/24(土) 14:36:40
ぜんぜんわからん^^
892デフォルトの名無しさん:2009/10/24(土) 15:02:36
>>887
VC++もVC#も無料で手に入るわけだが?何言ってんの?
893デフォルトの名無しさん:2009/10/24(土) 15:02:45
どうせ書けずに逃げるんだろうと高をくくって「書いたら?」を水を向けたら
ホントに書いてきた奴がいるので、今度は「スレ違い」と言ってみた。
894デフォルトの名無しさん:2009/10/24(土) 15:28:58
>>887のどこにも凄いと書いてない件について
895デフォルトの名無しさん:2009/10/24(土) 15:32:52
スレ違いというレッテルにそこは関係ない件について
896デフォルトの名無しさん:2009/10/24(土) 15:33:42
>>887 を読んだが、.NETの方がC++よりなぜ凄いのかはわからんな。
MSがC#に力を入れてるというのは知ってるけど。結局それだけ?
むしろ、その議論だと現MS路線にロックインして他の事、環境には一切
手を出さない人には良いという風にも感じられる。ついでにMSの
気が変わったらどうするんだろう。

言語仕様として凄いところとかは?

スレ違いという人もいるが、C++と他の言語の比較は別にここで
話しても良いのでは。


897デフォルトの名無しさん:2009/10/24(土) 15:36:37
.NETとC++の比較って、言語と言語の比較じゃないよね。
898デフォルトの名無しさん:2009/10/24(土) 15:44:23
.NETとネイティブの比較か、VB・C#・C++/CLIとC++の比較にしてくれないと
何とも話しようもない
899デフォルトの名無しさん:2009/10/24(土) 15:47:03
あと、.NETでC++を使うことの利点、あるいはC++で.NETを使う事の
利点とかが話になるのかな。
900デフォルトの名無しさん:2009/10/24(土) 15:47:53
.NET凄いよ。
岡三オンライン証券のツールが採用してるけど、
寄り付きでいつも遅延w
トラブルなんて慣れっ子ww
毎週のようにでかいパッチを強制ダウンロード。
凄すぎるぜwwww
901デフォルトの名無しさん:2009/10/24(土) 15:59:59
.NetというよりWPFが凄い
902デフォルトの名無しさん:2009/10/24(土) 16:19:58
いやだから、自分は>>885じゃないから、,NET>C++とは思ってないよ^^

Microsoftは今までサンデープログラマのようなアマチュアプログラマのために
VC++を安価に提供してきたけど、2010からはしなくなる。
で、知ってのとおりVC++のExpressエディションではMFC/ATLは使えないので
手の込んだアプリケーションを作るにはC#やVBを使ったほうが断然速い。
そういう層には、VBやC#(.NETベースのプログラム)の魅力は
VS2010でぐんと上がってくることになるだろう、と。

Windowsという開発環境に限って言えば、
VC++はアマチュアプログラマの世界から消えてなくなって
もう誰もC++名にソレ?みたいな世界におまんこ。
903デフォルトの名無しさん:2009/10/24(土) 16:33:24
windows自体が何ソレ?みたいな世界になればいいのに
904デフォルトの名無しさん:2009/10/24(土) 16:36:33
別にWindowsだけが開発環境でないし。
905デフォルトの名無しさん:2009/10/24(土) 16:46:36
>>902
Express がないのと「速い」のと関係あるんか?

それと PC 用の C++ コンパイラが 4 〜 5 万くらい、PC も 20 万以上で、
本来であればワークステーションが必要、という時代にもアマチュアは腐るほどいたぞ

よーするにコンパイラがフリーかどうかってのは言い訳に過ぎないと思うぜ
906デフォルトの名無しさん:2009/10/24(土) 16:49:41
MSはC++にもC#にも普通に力入れてるっつーか、最近のVC++の改善実績や
改善予定は結構凄いと思うけどな。
907デフォルトの名無しさん:2009/10/24(土) 16:51:30
あ、Express がないんじゃなく、Express にライブラリがない、だったか
まあどっちでもいいや
908デフォルトの名無しさん:2009/10/24(土) 16:55:52
>>905
コンパイラの基本部分ではなく部品が足らないから
作業時間が多くかかるって事だろ。
909デフォルトの名無しさん:2009/10/24(土) 16:56:38
>>887
C#を推進してるかも知れんが、.NetFrameworkを使う為の言語としてはC++/CLIを推奨してなかったか
910デフォルトの名無しさん:2009/10/24(土) 16:58:52
NetFramework = C#

C++/CLIは暇で作った。
911デフォルトの名無しさん:2009/10/24(土) 17:01:15
実際には、実行環境と言語は別なのだが。
どのプラットホームに対応するかはコンパイラの次第で。
C#コンパイラがバイナリを生成してもいいんだが。
912デフォルトの名無しさん:2009/10/24(土) 17:01:37
文章の最後に「まんこ」って書いたのがいけなかったのかな。
あんまり良く伝わらなかったみたい。

ニホンゴヘタデゴーメンナサイヨー。
913デフォルトの名無しさん:2009/10/24(土) 17:01:40
.NerFrameworkの利便性を得たいがためにC++からC#に乗り換えるぐらいなら
C++/CLIつかいなさいよ、程度だろ
914デフォルトの名無しさん:2009/10/24(土) 17:02:58
>>912
>>905が読めてないだけだよ
915デフォルトの名無しさん:2009/10/24(土) 17:04:01
まぁ実際、ATLなしでCOMプログラミングやってみたり、
MFC(やWTL)なしでドキュメントビューアーキテクチャのアプリを作ってみれば
どんだけめんどいか(これらのライブラリがどれだけ便利か)わかりますです^^

リボンコントロールをAPIと生のCで実現するのもうんこ漏れると思う。
やってないからわからんけど^^;;;;;;;;;
916デフォルトの名無しさん:2009/10/24(土) 17:10:47
これって便利なのか意味ないのかわからん
GUIとか楽になるのか


http://sourceforge.jp/projects/sfnet_stlsoft/
917デフォルトの名無しさん:2009/10/24(土) 17:15:46
楽したいならVB使えよ。
918デフォルトの名無しさん:2009/10/24(土) 17:21:36
>>916
GUIが楽になるという物でもないように思った。
けど、STL好きにとっては便利そうに見えたな。
919デフォルトの名無しさん:2009/10/24(土) 17:21:48
>>915
MFCが無いならQtを使えばいいじゃない
920デフォルトの名無しさん:2009/10/24(土) 17:24:33
>>915
アマチュアが COM を憶えるのに ATL は必要ないし、
憶えていくうちに自作のライブラリが充実していくから
結局 Express にそんなものはなくても大した問題じゃない
(ライブラリがコンパイラに付いてないってことが、
 そのままライブラリが永久に使えないことを意味する
 ような奴はそもそも適性に問題がある)

COM ではなく ATL を憶えたい場合にも授業料としてそんなに高いわけじゃなし
仮にそれらがフリーで手に入っても、自分に投資する気のないような奴は結局実らない
921デフォルトの名無しさん:2009/10/24(土) 17:28:25
その理屈はおかしい
922デフォルトの名無しさん:2009/10/24(土) 17:33:04
>>920
たしかになぁ。
ポインタ周りも自作のライブラリが充実していくから
boostとか無くても大した問題じゃないよな
(boostが禁止されたプロジェクトに配属されたからといって
メモリリークを起こす奴は適正に問題があるよな)
923デフォルトの名無しさん:2009/10/24(土) 17:33:37
ユーザーの適性とかの話はしてないのよ。
マイクロソフトがスタンダードエディションとそれを利用する層に対してどのように振舞うかを見たとき、
VS2010におけるマイクロソフトのVC++へのスタンスをどのように解釈するかって話をしているんだけど

・・・やっぱりまったく伝わってなかたあるよっていうか会話がかみ合って中田アルヨ。
ニポンゴムツカシイネ。ちょわいよん。
924デフォルトの名無しさん:2009/10/24(土) 17:34:01
>>919
Qt は良いと思うが、実際 Windows 開発で Qt 使ってる、
ってどの程度の割合いるんだろうね。滅茶苦茶低そう…
925デフォルトの名無しさん:2009/10/24(土) 17:34:06
boostがなければtr1::shared_ptrを使えばいいじゃない
926デフォルトの名無しさん:2009/10/24(土) 17:35:20
>>925
充実した自作ライブラリがあるからいらないんだと思うよ
927デフォルトの名無しさん:2009/10/24(土) 17:37:55
>>923
俺としてはコンパイラのみ無償提供だった時期が一番よかったように思うけど。
Expressは豪華すぎる。
928デフォルトの名無しさん:2009/10/24(土) 17:40:29
統合環境はいらないならWindows SDKだけDLすればいいじゃない
929デフォルトの名無しさん:2009/10/24(土) 17:41:56
>>916
GUI関係はあまりなかったと思う。
CoInitialize/CoUninitializeをクラスにしたり、
FindFirstFileやToolHelp32をイテレータ化するものだったり、
(いい意味で)誰もが思いつくものをそのままクラスにした感じ。
自作ライブラリと機能かぶるなんて人も多いと思う(自分は自作ライブラリを捨ててWinSTLにした)。

一言で言えば地味。
だから積極的に薦めるという気にならないけど、。使ってみて自分に合うと思ったら使い続けたらいいと思う。
930デフォルトの名無しさん:2009/10/24(土) 17:45:00
.rcを手書きするなんていやじゃー!
931デフォルトの名無しさん:2009/10/24(土) 17:52:43
と思ったなら買えばいいじゃん
932デフォルトの名無しさん:2009/10/24(土) 17:55:07
>>926
だからライブラリを憶えたいのかアーキテクチャを憶えたいのか言語を憶えたいのか、何の話をしてるんだよ?

それと、いちいちアンカーつける気がしなくなったが
ゲイツがどういう商売をする気かはゲイツの問題で
気に入らなきゃいつでも離れられるのが C++ を選ぶ理由でもあるわけで
あくまでゲイツと心中って前提がある奴の自分語りをこんなとこで聞きたくねえ
933デフォルトの名無しさん:2009/10/24(土) 17:57:07
C#ってバイナリー吐かないのか・・・Linux屋だから知らなかったよ
そんな中途半端な代物をC++と比較するのはちょっとおかしいんじゃないか?
934デフォルトの名無しさん:2009/10/24(土) 17:58:04
>>932
何で俺にアンカーついてんだ

既に作られたライブラリがあるにもかかわらず、自作ライブラリを
充実させることに心血を注ぐタイプなんだろ?
なのにポインタ周りのライブラリが充実してないとか基礎をおろそかにしすぎじゃん。
935デフォルトの名無しさん:2009/10/24(土) 18:25:16
>>934
心血を注ぐことに批判的な姿勢を感じるレスだったからアンカーつけたんだよ
既に作られているライブラリでも採用するかどうかはアマであろうとプロであろうと場によるぜ
ライセンスがらみで結局同じものを「あくまでオリジナル」で作るなんて話はそこいら中にあるし、
基礎のできてない奴が増えていることは恵まれすぎている環境を背景としている
おまえさんの論法では Hello, wold でさえ既にあるから自分で作るなってことだろ
936デフォルトの名無しさん:2009/10/24(土) 18:26:48
その理屈はおかしい
937デフォルトの名無しさん:2009/10/24(土) 18:28:57
>>933
Linuxでもwindowsでも動作して、速度はバイナリ並みなんですよ。
初回起動後にバイナリイメージが生成されます。
Javaのような仮想マシーンはないんです、
938934:2009/10/24(土) 18:33:02
> 基礎のできてない奴が増えていることは恵まれすぎている環境を背景としている
俺も>>927でも書いたとおり、Expressは豪華すぎると思うよ。
そこは意見一致してんのにな。

いつでも離れられるために自作ライブラリに固執するのか、郷に入って郷に従うのか、
その差かねぇ。
939デフォルトの名無しさん:2009/10/24(土) 18:33:48
コンパイラだけ仕えよ。clは総合環境でも使えるぞ。
940デフォルトの名無しさん:2009/10/24(土) 18:34:09
そういうのも普通にVMと呼ばれるから注意な
インタプリタ方式じゃなくてもVMはVM
941デフォルトの名無しさん:2009/10/24(土) 18:48:59
>>938
ああ悪い悪い、>>932 の2段落目はおまえさん宛じゃないんだ
942デフォルトの名無しさん:2009/10/24(土) 18:54:47
話の発端が

「.NetというよりWPFが凄い」
「具体的にどういうところがC++に比べて凄いのか書いたら?」

であることを忘れている人たちがいるようだ。
終始.NETとC++の比較の話であり、
それ以外の結論は無意味なのである。
943デフォルトの名無しさん:2009/10/24(土) 18:55:43
あ、間違えた。

「正直.NETって凄いよね」
「具体的にどういうところがC++に比べて凄いのか書いたら?」
944デフォルトの名無しさん:2009/10/24(土) 18:57:13
しかしmonoではWPFを使えるようになる見込はないとのこと…
945デフォルトの名無しさん:2009/10/24(土) 19:22:33
だから実行環境とプログラミング言語じゃ比べようがないだろ
1グラムと1円どっちが熱いかと聞いてるようなもんだ
946デフォルトの名無しさん:2009/10/24(土) 19:36:01
型名と同じ名前の変数を作りたいんですが、C++だと、構造体等を宣言した直後に付ける以外できないのでしょうか?

struct Hoge{}Hoge;  ○

static Hoge& Hoge = *(Hoge*)0;  ×

staticメンバに「.」演算子でアクセスしたいんですが・・・
ていうか、そんなことしたら殺されますか?
947デフォルトの名無しさん:2009/10/24(土) 19:46:07
static Hoge Hoge;
じゃだめなの?
948デフォルトの名無しさん:2009/10/24(土) 19:57:23
あ、ごめんなさい。
重いクラスとかでもできるようにしたかったんで、参照じゃないとあまり意味がないんです。
それに、ヘッダに書くのであまり、実体を置きたくなかったもんで
949デフォルトの名無しさん:2009/10/24(土) 19:59:57
中身のない参照でいいだろ。
実際それはそういう風に使われてる。
950デフォルトの名無しさん:2009/10/24(土) 20:07:35
>>946
クラス名と同名の変数なら struct Hoge Hoge; でいける。

でもそんな動機でヘッダに宣言するのはいただけない。
951デフォルトの名無しさん:2009/10/24(土) 20:23:28
>>946
static struct Hoge& Hoge = *(struct Hoge*)0;
じゃなくて?
952デフォルトの名無しさん:2009/10/24(土) 21:11:54
>>949
それの宣言方法がわからなかったんです・・・。
>>950
やっぱりいただけないですよね〜
>>951
できました。C言語のレベルでしたね・・・。精進せねば

みなさんありがとうございました。
953デフォルトの名無しさん:2009/10/24(土) 21:16:33
>>949
> 中身のない参照でいいだろ。
そんなん作れないよwwwwww
954デフォルトの名無しさん:2009/10/24(土) 21:20:54
>>951
そんなのありか?
955デフォルトの名無しさん:2009/10/24(土) 21:32:05
Cスタイルのキャストは使わないでください。
956デフォルトの名無しさん:2009/10/24(土) 21:39:55
キャストの記法もそうだけど、structが鬱陶しい。
ぱっと見はC言語なのに実はC++とか、なんか嫌だ。
957デフォルトの名無しさん:2009/10/24(土) 21:44:15
static_cast<Hoge>(aaa)とか面倒です
958デフォルトの名無しさん:2009/10/24(土) 21:57:52
>>957
自分は>>951のようなのを書くときでもstatic_castを使ってるよ。慣れの問題かも。
959デフォルトの名無しさん:2009/10/24(土) 21:58:26
スタイルの問題だけど、俺の場合typedefかコンストラクタが一番上に来ることが多い(publicなことが多い)からstructのほうがprivate:一回分楽
それにインターフェイスとか関数オブジェクトとかポリシーとか使ってると普通に全公開のクラスもよくあるからstructのほう使いたくなる
960デフォルトの名無しさん:2009/10/24(土) 22:02:47
cast は明示的に使った方が良いよ。
いざと言う場合に、どこで使っているかを拾う簡単な方法がそうでないと無い。
961デフォルトの名無しさん:2009/10/24(土) 22:04:30
>>960
賛成。使うべき。でももうちょっと短いキャスト名にして欲しかった。
962デフォルトの名無しさん:2009/10/24(土) 22:12:03
入力補完とか使って入力してるからタイプ数はどうでもいいんだけど
沢山あると凄く見辛い…
あれか、キャストなんか使うなということか
963デフォルトの名無しさん:2009/10/24(土) 22:14:16
メイヤーズはそういってるね。
reinterpret_castはいらいらするほど長いから
すごく使いたくなくなる。
それは海洋遭難者のために救命ボートに備え付けられた非常食が
わざとゲロが出るほどまずく作られているのと同じ理由だって。
964デフォルトの名無しさん:2009/10/24(土) 22:16:39
> あれか、キャストなんか使うなということか

まずそこだよな
static_cast<hoge*>(0) とか・・・
965デフォルトの名無しさん:2009/10/24(土) 22:33:47
>>951
これ未定義動作になるよな?
少なくとも Hoge.なんとか で参照したら。
966デフォルトの名無しさん:2009/10/24(土) 22:45:27
新キャストはWinAPIとかキャスト使いまくりを強要されるコードを書くときイライラする。
せめてstatic_castはもうちょっと短くして欲しかった…。
1文に2個も入ってたりすると、すげぇ横延びて困る。
967デフォルトの名無しさん:2009/10/24(土) 22:54:49
reinterpret_castはコンパイラへの詐欺、
dynamic_castは設計の脆弱さが露呈した結果、
const_castは恋の予感。
968デフォルトの名無しさん:2009/10/24(土) 23:06:30
入力補完なんて頼ったことないぜ
969デフォルトの名無しさん:2009/10/24(土) 23:56:21
template <class T, class U> T &scst(U &u) { return static_cast<T>(u); }
970デフォルトの名無しさん:2009/10/25(日) 00:07:46
それ使うときにscst<int,long>(42L);とか書かなきゃならないじゃない
めんどくせえよ
971デフォルトの名無しさん:2009/10/25(日) 00:14:36
>>970
Uの方は勝手に推測してくれるんじゃないかな?
972961:2009/10/25(日) 00:16:27
>>962
> 沢山あると凄く見辛い…
俺もこっちの意味。
可読性がちょっとアレになっちゃう。
c_castとかにして欲しかった。

>>969
なるほどね。
でも標準でそれを採用してくれていないと、
結局他の人が読んだときに困るだけだから
可読性がさらに悪くなる。

まあ標準仕様に文句付けてもしょうがないんだけどさあ・・・ねぇ。。。
973デフォルトの名無しさん:2009/10/25(日) 00:18:54
キャストするな、必要だとしても関数にまとめるなりしろ、ってことに決まってるだろ。
974デフォルトの名無しさん:2009/10/25(日) 00:23:46
975デフォルトの名無しさん:2009/10/25(日) 00:30:16
>>967
dynamic_castだらけです。
むしろ愛してます。
976デフォルトの名無しさん:2009/10/25(日) 00:35:10
>>975
dynamic_castだらけってのはなんかまずいんじゃないか?
結構欠陥プログラミングに見られる傾向だぞ。
977デフォルトの名無しさん:2009/10/25(日) 00:39:12
欠陥って言えば欠陥だが、
どちらかと言えば継ぎ接ぎだらけ。
978デフォルトの名無しさん:2009/10/25(日) 00:41:44
dynamic_cast+ifelseの羅列が目に浮かぶようだ
979デフォルトの名無しさん:2009/10/25(日) 00:47:43
975自身はまともだけど、糞ライブラリを使わされているせいで、
dynamic_castの多用せざるを得ないという可能性もまだ考えられるぞ。
980デフォルトの名無しさん:2009/10/25(日) 00:55:21
dynamic_castなんて軟弱なもの一回も使ったことないわ
981デフォルトの名無しさん:2009/10/25(日) 01:00:36
(意訳)使い道が分からないわ
982デフォルトの名無しさん:2009/10/25(日) 01:26:58
タイプが面倒なんですけど
983デフォルトの名無しさん:2009/10/25(日) 01:39:29
(意訳)綴りが覚えられないんですけど
984デフォルトの名無しさん:2009/10/25(日) 01:44:56
興奮状態で煽ると内容がどんどん自己紹介化していくって
偉い人が言ってた。
985951:2009/10/25(日) 01:52:16
あ。structつけないとダメじゃんってだけで機械的にやってしまった。
エイリアス使ってるからC++だよね。お騒がせしました。

>>965
未定義になるの?
C++だと0とnullは違うんだっけ?
986デフォルトの名無しさん:2009/10/25(日) 02:13:44
ヌルぽの参照剥しは未定義じゃない?
987デフォルトの名無しさん:2009/10/25(日) 02:14:01
>>985
ヌルポインタをデリファレンスして使うと未定義動作逝き。
988951:2009/10/25(日) 02:17:34
あ、そうなんだ?
これは勉強になりました。

>>946にも届きますように。
989デフォルトの名無しさん:2009/10/25(日) 09:06:28
dynamic_cast 嫌いな人って QueryInterface も否定されます?
990デフォルトの名無しさん:2009/10/25(日) 09:26:06
スレ違い
991デフォルトの名無しさん:2009/10/25(日) 10:40:06
>>985

NULL == (void*)0;
これが違う

NULL == 0
はOK
992デフォルトの名無しさん:2009/10/25(日) 12:37:08
dynamic_castってクラス名を文字列で保持してて比較してるだけって聞いたんだけど本当だろうか
993デフォルトの名無しさん:2009/10/25(日) 12:51:29
>>992
実装の詳細は各々ベンダの自由であり、
何だっていいんだろう。
994デフォルトの名無しさん:2009/10/25(日) 12:57:34
まあ実際問題としては名前使って比較するしかないんだけどな
後でどんな派生クラスが新しく追加されるかわからんから
995946:2009/10/25(日) 13:55:03
>>988
staticメンバにアクセスするのが目的なので、基本的には大丈夫です。
あと、非staticメンバにアクセスしたときに起こる問題も把握しております故・・・

ありがとうございました。
996デフォルトの名無しさん:2009/10/25(日) 14:26:45
ume;
997デフォルトの名無しさん:2009/10/25(日) 14:41:35
埋め
998デフォルトの名無しさん:2009/10/25(日) 14:42:16
埋め

999デフォルトの名無しさん:2009/10/25(日) 14:42:57
1000デフォルトの名無しさん:2009/10/25(日) 14:43:53
じゃ、もらいます
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。