【初心者歓迎】C/C++室 Ver.84【環境依存OK】at TECH
【初心者歓迎】C/C++室 Ver.84【環境依存OK】 - 暇つぶし2ch175:152
13/05/15 21:19:55.15
インスタンスを生成でお願いします

176:デフォルトの名無しさん
13/05/15 22:54:57.47
>>175
派生クラスのインスタンスの数に応じて基底クラスのインスタンスも複数生成される

struct X { int a; };
struct Y : X {};
Y y1;
Y y2;

のとき y1.a と y2.a は別物

177:デフォルトの名無しさん
13/05/15 23:02:17.63
つまんねっ

178:152
13/05/15 23:52:15.81
すいません書き直します

基底クラスAがあり、そのAの派生クラスBがあり
Bのインスタンスを何度も生成した場合
B1とB2の基底クラスインスタンスAは
A単体なのかA1、A2と増えていくのかどちらですか?

179:片山博文MZパンク ◆0lBZNi.Q7evd
13/05/16 00:00:10.27
>>178 後者

180:デフォルトの名無しさん
13/05/16 00:17:06.64
B1とB2はいったいどこから出てきたんだ
基底クラスインスタンスなんてわけわからん語を作るな
コードを書いて説明しろ

181:デフォルトの名無しさん
13/05/16 00:18:53.86
こういうのが説明力がないっていうんだよな
会社で煙たがられる存在

182:デフォルトの名無しさん
13/05/16 00:20:36.18
基底クラスインスタンスのメンバ変数を書き換えるようなメソッドを用意して実験したらいいんじゃないかな(エスパー)

183:デフォルトの名無しさん
13/05/16 01:01:07.62
インスタンスの数=newした数(Java風)
だから顔の数じゃなくてボディの数で数えろと

184:デフォルトの名無しさん
13/05/16 01:46:42.40
>>180
何度も生成するから
1、2、3、4、5…
と増えていくんだよ

185:デフォルトの名無しさん
13/05/16 07:19:43.02
単体なのか増えていくのか、
質問するより、自分でコード書いた方が早いだろ

186:デフォルトの名無しさん
13/05/16 09:52:49.32
こういうのは入門書でよくやる理解しやすいたとえ話でやるより
コード貼ってどうこうしたほうが…そもそも自作自演っぽく思えてきたけど

187:デフォルトの名無しさん
13/05/16 11:35:44.57
たしかにQZはC++の知識がないから
QZの自演ってことはありうる

188:デフォルトの名無しさん
13/05/16 12:25:09.68
>>178
結局何を聞きたいのかさっぱりだ

189:デフォルトの名無しさん
13/05/16 12:34:47.33
派生を生成するために
基底のインスタンスも増えていったらメモリの無駄じゃないの?

190:デフォルトの名無しさん
13/05/16 12:38:06.02
>>189
だったら派生せずに新しくクラスを作ればいいじゃん

191:デフォルトの名無しさん
13/05/16 12:38:42.93
>>189
派生のインスタンスの中に基底のインスタンスに相当する部分が含まれているのでは?

192:デフォルトの名無しさん
13/05/16 12:40:31.09
継承を一体何だと思ってんだか

193:デフォルトの名無しさん
13/05/16 12:46:03.41
派生を複数生成しても
基底は1つになる方法はない?

194:デフォルトの名無しさん
13/05/16 12:48:54.89
なんか意味を正しく理解してないのがいそうだからこの流れでは『インスタンス』禁止にしとけ
クラスTのインスタンス -> T型の変数 と言い換えとけ

195:デフォルトの名無しさん
13/05/16 13:19:11.46
>>193
継承を使わずに基底にあたる型をshared_ptrとかでメンバに持つクラスにしろ

196:デフォルトの名無しさん
13/05/16 13:25:38.02
>>193
virtual継承

197:デフォルトの名無しさん
13/05/16 13:38:48.28
>>193
is-aとhas-aの違いはわかる?

198:デフォルトの名無しさん
13/05/16 15:53:31.31
学生は人である
学生を増やしても人のインスタンスが一つになっている状況とは如何に
あれか、学生数の水増しかw

199:デフォルトの名無しさん
13/05/16 16:17:39.82
>>193の中では継承はどういうイメージになってるんだ?

200:デフォルトの名無しさん
13/05/16 17:01:59.23
>>193
派生を使わない。
基本クラスに持たせようとしていた情報は
グローバル変数で持つ。
派生クラスに持たせようとしていた情報は単独の
クラスにして
みんなでグローバル変数をみる

201:デフォルトの名無しさん
13/05/16 17:04:43.82
>>193
コンポジションを使うとか
どうしても継承が必要なのか、継承を使わなくてもいいのかはよく検討すべき

202:デフォルトの名無しさん
13/05/16 18:30:51.59
もうAとBとB1とB2を全部
グローバル変数にしようぜ

203:デフォルトの名無しさん
13/05/17 01:01:04.77
1.const char* a //*aがconst
2.char* const b //bがconst
3.char const* c //1.と同じ?2.と同じ?

4.const char& d //dがconst?
5.char& const e //どこがconst?
6.char const& f //ドカーン!

constが分からんとですorz

204:デフォルトの名無しさん
13/05/17 01:02:41.45
>>203
何故自分で試そうとしないのですか?

205:デフォルトの名無しさん
13/05/17 01:11:23.80
>>203
これ見てわからなかったらもう来るなよミジンコ
URLリンク(ideone.com)

206:デフォルトの名無しさん
13/05/17 01:41:05.07
くぎゅうぅぅ

207:デフォルトの名無しさん
13/05/17 01:47:27.57
>>203
とりあえずconstは(変数ではなく)型に付くと覚えましょう

1.const char* a //const char型へのポインタ(型)(の変数)a
2.char* const b //char型へのconstポインタ(型)(の変数)b
3.char const* c //1.と同じ

4.const char& d //const char型への参照(型)(の変数)d (※)
 (※この形を『const参照』と呼びますがconst型への参照(型)の意味であって、型へのconst参照(型)の意味ではありません)
5.char& const e //エラー
6.char const& f //4.と同じ

208:デフォルトの名無しさん
13/05/17 02:03:39.74
constは左隣につく、左側がない場合のみ、例外として右側につく、と覚えてる

209:KUSO KOTE
13/05/17 02:15:00.69
昔「エキスパートCプログラミング 知られざるCの深層」
というおUNKOな本があって、
型宣言の説明だけは素晴らしかった。

その読解法によると
const char* a
 a is a pointer to "const char"
char* const b
 b is a const pointer to char
char const* c
 c is a pointer to const char (=a)
const char& d
 d is a reference to "const char"
char& const e
 e is a const reference to char→エラー
char const& f
 f is a reference to const char

210:デフォルトの名無しさん
13/05/17 07:20:10.83
>>203
1, 4 は例外的だし意味もあいまいだから「使わない」

211:デフォルトの名無しさん
13/05/17 07:40:06.86
>>210
それぞれ3と6を使うってこと? それならむしろ自分は逆だなあ。

212:デフォルトの名無しさん
13/05/17 08:52:28.92
char const* a は const *a だから、*a がコンスト
char* const a は const a だから、a がコンスト
って考えると、3, 6は確かに自然な気がする

でも、char const& a は const &a だから、&aがコンストかっていうと
何それイミフw
って考えると、全然自然じゃない気もする。

213:デフォルトの名無しさん
13/05/17 09:12:40.30
constは
・左側で一番近い
・型に付いて
修飾するというのが基本ルール
>>203の1,4はその基本ルールでは解釈できず>>208,210のいうように例外的に解釈しなければならないから不自然

>>212はconstが右側の、型ではない*aやaや&aに付いてる、という解釈の時点で最初から二重に間違ってる

214:デフォルトの名無しさん
13/05/17 10:15:43.42
なるほどなー。

自分は1,4を使う派だけど、constをどちらの目的で使うかによって、
型名とconstの位置が逆になるので、パッと見て分かりやすいかなー?と思っている。

215:デフォルトの名無しさん
13/05/17 10:49:49.41
>>213
なるほど、てことは const の左側に「が」を補って
char const* は char が const
char* const は char* が const
char const& は char が const
char& const は char& が constはイミフだからエラー
って考えると自然?

216:デフォルトの名無しさん
13/05/17 12:03:02.39
そんなかんじでいいんじゃない

217:デフォルトの名無しさん
13/05/17 12:43:38.38
左側にconstは記憶域指定子(static,extern,...)付きの宣言とぱっと見同じ読み方で解釈できて
const初見の人でも受け入れやすい形だから便宜的に導入された記法なのかな

int a; // int
static int a; // なにかついてるけどint
extern int a; // なにかついてるけどint
const int a; // なにかついてるけどint
int const a; // なにかついてるけどconst、・・・?

218:デフォルトの名無しさん
13/05/17 12:46:15.89
>・左側で一番近い
規格の該当個所はよ

219:KUSO KOTE
13/05/17 15:03:07.06
>>217
記憶域指定子は別に左でなくても良いのだけれど
URLリンク(ideone.com)

220:KUSO KOTE
13/05/17 15:12:14.57
URL間違えたoops
URLリンク(ideone.com)

221:デフォルトの名無しさん
13/05/17 15:19:59.33
URLリンク(msdn.microsoft.com)
stringを取得する関数ってこれみたいに参照渡ししてることが多いけど、stringをreturnで返したら駄目なの?

222:KUSO KOTE
13/05/17 15:31:43.27
>>221
昔は右辺値参照が無かったから
コピーのオーバーヘッドを避けるために
参照にしていたと思われる。

223:デフォルトの名無しさん
13/05/17 15:47:36.06
やはりマイクロソフトの設計思想かな
マイクロソフトは昔から関数を
inに対してoutを与えるものでなく
「正否のステータスを返せるサブルーチン」
ととらえているところがある。
だから戻り値は参照渡しで受け取る

224:デフォルトの名無しさん
13/05/17 15:50:21.95
>>221
C++の.NET拡張はスレ違い

225:デフォルトの名無しさん
13/05/17 16:13:49.70
>>224
221はただの例示で本題はstd::stringだからな?

226:デフォルトの名無しさん
13/05/17 16:22:45.99
C++の文字列はJavaみたいはimmutable
じゃないからねえ。
わざわざインスタンスを生成するより
使い回す方が自然。

227:デフォルトの名無しさん
13/05/17 19:52:53.57
今回のconstもだけど、テンプレートやポインタ等の型を
コンパイラはどのように構文解析して型を決めるんだ?

228:デフォルトの名無しさん
13/05/17 22:10:02.07
その状況で構文規則的にありえる構文候補を列挙してソースとマッチするものに絞り込んでいくんだがそういう話でなく?

229:デフォルトの名無しさん
13/05/17 22:14:50.72
*で区切られると覚えれば
別に左とか右とかそんなのどうでもいいんだよ

230:KUSO KOTE
13/05/17 22:20:16.28
>>227
1.明らかにシンボル名と思われる所を見つける
2-1.すぐ右に()があれば関数
2-2.すぐ右に[]があれば配列
2-3.すぐ左に&があれば参照
2-4.すぐ左に*または*constがあればポインターまたはconstなポインター
2-5.すぐ左に「型」または「型 const」または「const 型」があれば終わり
3.その 関数の戻り値/配列の要素/参照先/ポインターの差すものは…
→2-1に戻って解析を続ける

ただし途中に記憶指定子とか入るので適当にがんばる

231:デフォルトの名無しさん
13/05/17 22:29:30.64
くそみそ

232:デフォルトの名無しさん
13/05/17 22:58:32.42
"const"は型の前と後のどちらに置いたほうがよいですか
URLリンク(www.libjingu.jp)

233:デフォルトの名無しさん
13/05/17 23:02:15.59
日本語でも英語でも修飾子や形容詞は名詞の前にあったほうが読みやすいってことか

234:デフォルトの名無しさん
13/05/18 00:27:47.88
欧米人には>>209のC/C++表記だとすぐにそのように解釈できるのかな
同様にC/C++の型表記も自然な表記って感じるのか
俺的には、配列は int arr[10]じゃなく int[10] arrがいいだろって
初めのころは思っていたからな。

235:デフォルトの名無しさん
13/05/18 00:38:49.32
Cの文法がint[] a でなくint a[]なのは
使う時の書き方に似せるという
方針だったはず。
だがC++で参照&が登場した際に一貫性を失った。
ハゲは臭いものにフタをするタイプだから
整合性を考えなくて困る。

236:KUSO KOTE
13/05/18 01:15:59.31
>>235
宣言と使用の記述の統一ついては
ISO/IEC 9899:1990の時点で既に
 宣言 void (*pf)() = f;
 使用1 pf();
 使用2 (********pf)();
とか怪しかったような。

237:デフォルトの名無しさん
13/05/18 01:31:31.65
そんなことよりC#でやろうぜ
文法キモイ言語はポイしなさいポイ

238:デフォルトの名無しさん
13/05/18 08:04:30.10
規格の何番の何ページという話は
規格オタ隔離スレでも作ってそこでやれ
初心者スレなんだよここは

239:デフォルトの名無しさん
13/05/18 09:20:03.56
>>238
いやそのりくつはおかしい

240:デフォルトの名無しさん
13/05/18 10:14:01.38
有識者が初心者に正しい使用を教える
ってよりは、
俺こんなに規格読み込んでるゼーっていう、
自己顕示欲旺盛な人たち同士の会話で、
初心者置いてけぼりなふいんきが
感じられる。

241:デフォルトの名無しさん
13/05/18 15:22:32.62
>>237
C#で済むプログラムしか作らないなら黙ってC#使えばいいんだよ
お前がこのスレに居ることが全くの無駄

242:デフォルトの名無しさん
13/05/18 15:32:38.93
>C#で済む
この言い回しが勘違いも甚だしい。
「CはC#よりすごいんだ!」的な
自分の中で自分の価値を高めようと
必死なのがよくわかる。

243:デフォルトの名無しさん
13/05/19 00:45:26.82
Cのが速いんだから当たり前

244:デフォルトの名無しさん
13/05/19 00:52:59.09
.NET FrameworkのJITコンパイラの質がどんどん向上してスピードが上がってるんだが
セキュリティの更新だけだと思ってるのか?

245:デフォルトの名無しさん
13/05/19 00:59:54.36
より低級な部分の処理には(ryですね、分かります

246:デフォルトの名無しさん
13/05/19 01:14:04.19
そのうちアセンブラを追い越す性能になるかもなw

247:デフォルトの名無しさん
13/05/19 01:17:53.99
>>246
アセンブラ直接弄ると、小数の丸め処理まで制御できるからな……
コンパイラがどこまで解釈できるかの勝負

248:デフォルトの名無しさん
13/05/19 01:41:00.42
>>244
それでもC/C++に比べりゃゴミみたいなもんだよ

249:デフォルトの名無しさん
13/05/19 02:06:25.95
書き手の技量次第でFAではあるが、平均的なプログラマを前提にすると
手書きアセンブラと今時のC/C++コンパイラってどっちが速いか微妙じゃね?

250:デフォルトの名無しさん
13/05/19 02:11:20.47
アセンブラにしたって速度が要求されるコアな部分だけ使うのが
本来の使い方だからね。

251:デフォルトの名無しさん
13/05/19 02:17:33.53
ぷっ

252:デフォルトの名無しさん
13/05/19 05:05:15.33
速度って言うけどさあ
細かい動的メモリ確保が
壊滅的におそいじゃんC/C++は。
そういうのを自前でメモリ管理すると
圧倒的に速くはなるんだが
VM系のnewの代替としては限界がある。

253:デフォルトの名無しさん
13/05/19 06:49:35.08
え?malloc freeやら new deleteがめちゃくちゃ遅いってこと?
そんな話聞いたことがないが

254:デフォルトの名無しさん
13/05/19 06:49:49.29
>>252
そういうのは自分でなんとかするものだ

255:デフォルトの名無しさん
13/05/19 07:39:02.23
>>253
mallocは明らかに遅いだろう

256:デフォルトの名無しさん
13/05/19 07:44:57.58
なにと比べて?

257:デフォルトの名無しさん
13/05/19 07:50:20.62
いや、普通の関数呼び出しとか
浮動小数点数演算とか
ポインターアクセスとか
自動変数のメモリ確保と比べて

258:デフォルトの名無しさん
13/05/19 07:51:08.31
中でリニアサーチを始めてると聞いた

259:デフォルトの名無しさん
13/05/19 07:52:19.07
当たり前だろう
ヒープを利用するのはそれだけのコストを払っても便利だからなのでは?

260:デフォルトの名無しさん
13/05/19 07:53:22.13
>>258
二分木にして適切にサーチする実装くらいあるだろう

261:デフォルトの名無しさん
13/05/19 07:53:54.40
>>259
多言語との比較の話を
Cのメモリ確保方法の話に
すり替えないでください

262:デフォルトの名無しさん
13/05/19 07:55:33.29
他の言語だと早いのか?

263:デフォルトの名無しさん
13/05/19 07:56:16.70
1秒間に100万回ループする所では
mallocの使用はためらわれるけど
Javaならまあ大きな問題はなかろう

264:KUSO KOTE
13/05/19 08:03:58.39
さすがに100満開はかなり厳しいぞよ。
でも体感でJava/C#のnewはC++のnewより100倍は高速かな。
後でまとめて別スレッドでGCするんだから
解放時間入れてもスループットは高いだろう。
スループットだけは。

265:デフォルトの名無しさん
13/05/19 08:06:31.49
でもOSのカーネルじゃ使い物にならないよね(プゲラ

266:デフォルトの名無しさん
13/05/19 08:09:02.71
コンテキストスイッチしようとしたら
ゴミがゴミ整理しようとして
5000マイクロ秒 待たされちゃいました。てへ

267:デフォルトの名無しさん
13/05/19 08:20:33.29
>>262
ガベコレ系の言語は
C/C++の自動変数の代わりに
newする設計なのでそれなりに速いよ

ただ適材適所というか、やっぱり
CPU演算メインな処理は
C系じゃなきゃね

268:デフォルトの名無しさん
13/05/19 08:39:56.90
たしかに、すべての変数がnewで確保されるのだから
Cのように100ナノ秒ちかくかかっていたら使いものに
なってないっていう

269:デフォルトの名無しさん
13/05/19 09:03:42.10
でもJava/C# は C/C++ に比べて何を省略したからスピードアップを図ることができたの?
GC があろうとなかろうとアロケーションという点では同じだとおもうんだけれど

270:デフォルトの名無しさん
13/05/19 09:11:39.60
コンパイル時になんでもかんでもしようとしないからじゃね

271:デフォルトの名無しさん
13/05/19 09:21:52.31
>>269
マイクロソフトのドキュメントには
「ガベコレ用スタックポインターをずらすだけなので高速です」
と書いてあったような。
つまり確保する領域の中に
「後でそれだけでガベコレできる情報」
を埋め込んでいることになる。詳細は不明

272:デフォルトの名無しさん
13/05/19 09:26:03.10
URLリンク(www.google.co.jp)

273:デフォルトの名無しさん
13/05/19 09:40:50.19
>new Byte[1024]
Cが速いという結果を得るための設定ですね?
しかもJava1.5って、Sunが.NETを参考に
GCを改良する前のやつ?

274:デフォルトの名無しさん
13/05/19 09:54:40.89
>>252
.NET のメモリ確保は0埋めするから壊滅的に重いじゃねーか

275:KUSO KOTE
13/05/19 10:16:56.51
>>274
実測して比較しようじゃないか
URLリンク(ideone.com)

276:KUSO KOTE
13/05/19 10:23:30.46
すまん間違えた
microseconds→milliseconds
C#あんま速くなかったわ

277:デフォルトの名無しさん
13/05/19 10:26:43.12
C#は配列確保がクソ重いからメモリプールしてるわ

278:KUSO KOTE
13/05/19 10:28:11.15
ちなみに俺の環境では
 C++:150マイクロ秒
 C#:0.15マイクロ秒

279:デフォルトの名無しさん
13/05/19 10:43:14.88
>>278
それ、 >>276 の間違いは直して出してるの?

280:デフォルトの名無しさん
13/05/19 10:50:21.93
コンパイラによっては内部実装がdlmallocになって、
昔よりかは高速になったって聞いたけど

281:KUSO KOTE
13/05/19 11:03:34.06
>>279
直してるつもりなんだけど
あんまりVC++2012が遅いので不安になってきた。。
できれば誰か他の人、試して ↓修正版
URLリンク(ideone.com)

282:デフォルトの名無しさん
13/05/19 11:06:57.53
そりゃそんな細かいメモリ確保したら遅いのは当たり前だわ
流石にそういうのは .NET に分があるのは間違いない

283:デフォルトの名無しさん
13/05/19 11:15:58.40
つまりC++の細かいメモリ確保は
Java/C#より千倍遅いとふむふむ

284:デフォルトの名無しさん
13/05/19 11:25:34.32
C++とC#でNが違うだろ>>281のソース

285:デフォルトの名無しさん
13/05/19 11:26:54.20
C++でもアロケータ自作で乗り切れるが
そもそもそんな細かいnewを何度も行うケースは稀だから
意味の無い比較だな

286:デフォルトの名無しさん
13/05/19 11:28:49.49
boost::poolをいろいろ使ってみるとか
種類があるから

287:デフォルトの名無しさん
13/05/19 11:30:52.81
最適化はやってるんだよね?
確かVCはデバッグ用だといろんな情報を埋め込んでて遅くなったと思うけど

288:デフォルトの名無しさん
13/05/19 11:33:49.10
>>284
平均する時に割ってるからいいじゃん
むしろ速すぎて100倍しないと
測れなかったんだろ(プ

>>287
最適化してなかったら死刑だなw

289:デフォルトの名無しさん
13/05/19 11:40:00.45
ideoneは最適化しなかったような

290:デフォルトの名無しさん
13/05/19 11:41:23.84
エクスプローラへのD&Dを試してみてるんだけど、何故か遅い
一回のドロップ操作完了までに、2~3秒位掛かるんだけどこれ遅すぎだよな?

291:デフォルトの名無しさん
13/05/19 11:41:59.66
>>282
このプログラムのような細かいメモリ確保に対してC++では不可能で.NETが可能な最適化とは?

292:デフォルトの名無しさん
13/05/19 11:42:57.93
標準でミリ秒測定できるとはいい時代になったなー
GetTickCount()とか
gettimeofday()を使っていた頃が懐かしい

>>290
エロアニメの見すぎだろ

293:デフォルトの名無しさん
13/05/19 11:43:19.23
>>291
最適化の問題ではなく、
そもそもデバッグ用のメモリアロケータは
バッファオーバーフロー検知や初期化漏れ検知のために
色々と小細工してる

294:デフォルトの名無しさん
13/05/19 11:48:09.15
>>293
それがC++と.NETの違いだとは思わんのだが。

295:デフォルトの名無しさん
13/05/19 11:49:37.20
>>293
じゃあ君のパソコンで比較して
結果貼りつけてみなよ
俺はメンドイからやらん

そもそもメモリ管理の仕組みが
根本から違うんだっての
最適化の問題じゃない
C++使いがガベコレにnewで勝てると
思ってたなんて新発見だわ

296:デフォルトの名無しさん
13/05/19 11:49:50.38
>>294
小細工ってのは、特定の値で初期化することで、
初期化のコストが発生する

297:デフォルトの名無しさん
13/05/19 11:51:54.14
>>269
フリーリストを手繰る処理を省略して、その分の処理をGC時にやってるようなもんだろう。
総計算量はイコールとは限らんが。

298:デフォルトの名無しさん
13/05/19 11:53:20.57
>>295
勝ち負けで言ったら予測不能な
中断を受ける可能性が入るC#は
処理時間にシビアな世界では負けだな
役に立たない

299:デフォルトの名無しさん
13/05/19 11:55:21.04
C/C++を使う理由は速度とかじゃない気がする。
.NETは十分速いもん

体感的には.NETが遅いので、C/C++を使うじゃないかとー

300:デフォルトの名無しさん
13/05/19 11:55:29.30
C++のほうは個別のdelete終了ごとにアロケータの内部整合性を保たないといけないけど、
GCなら一括でいろいろできるね。

301:デフォルトの名無しさん
13/05/19 11:56:19.37
>>299 .NETはPC上でしか動かないからな。組み込み.NETランタイムとか開発されれば別だが。

302:デフォルトの名無しさん
13/05/19 11:58:53.09
速度だよ
似たようなアルゴリズムを .NET で実行と明らかに遅い

303:デフォルトの名無しさん
13/05/19 12:04:51.96
標準、dlmalloc、tlsf、固定プールとか
いろいろ比較してみたいけど、なんか環境用意するのが面倒だな…

304:デフォルトの名無しさん
13/05/19 12:08:21.19
>>302
比較コードはよ

305:デフォルトの名無しさん
13/05/19 13:00:24.45
あいかわらず無意味な比較してるなあ
.NETのコア部分はC++で書かれてるのに

306:デフォルトの名無しさん
13/05/19 13:06:32.79
何かが成功するかタイムアウトするまでループって処理で
for (int i = 0; i < 5000; i += s){
 nanika = suru();
 if (nanika == seikou) break;
 sleep(s);
}
みたいのが繰り返し出てくるんだけど、何か上手い書き方ないですか?

optional r = seikou_or_timeout(5000, [](){ return optional(...); });
こんな感じで書けたら素敵なんですが・・・・・・

307:デフォルトの名無しさん
13/05/19 13:08:47.13
WaitForSingleObjectで別スレッドで動かすとか

308:デフォルトの名無しさん
13/05/19 13:09:50.63
そこまで書けるのなら書けば良いじゃん

309:デフォルトの名無しさん
13/05/19 13:10:13.45
>>305
>>253の疑問を晴らすには
そんなにおかしな比較とは思えんが、
いつかの空ループベンチよりはマシだ

>.NETのコア部分はC++で書かれてるのに
惨めwww

310:269 ◆QZaw55cn4c
13/05/19 13:12:31.15
>>297
>総計算量
アロケーションからリリース(GC込みこみ)までトータルでみてどっちのほうが速いかというのが気になります。
C/C++ の場合は cmalloc() させるとしても、それでも C/C++ の方が速いと、どーしても思うのですが

311:デフォルトの名無しさん
13/05/19 13:14:51.55
>>306
win32api ならイベントオブジェクトを好んでいるんですけれども‥‥posix 系はどうしているのだろう?

312:デフォルトの名無しさん
13/05/19 13:22:24.52
>>308
ラムダ式が何を返すにしろとにかくoptional的な何かに突っ込んで返すってとこがどう書けばいいのか
よく分からないのと、もしかしたらループ以外に何か上手い方法か、そういうライブラリが既にあったり
するのかな?という期待も込めて・・・・・・

313:デフォルトの名無しさん
13/05/19 13:23:08.79
>>307 >>311
イベント、ちょっと調べてきます。

314:290
13/05/19 13:37:52.62
OLE D&D動作の確認だから、ドロップしたファイルのサイズは1kb程度
これだけで、2~3秒はやっぱり遅い(Windows XP)。

んで、他のOSで(Windows7)確認してみたら一瞬、OS依存か

315:デフォルトの名無しさん
13/05/19 14:06:21.42
>>311
POSIXには条件変数というクソな同期の仕組みがある。
そのクソ仕様はそのままC++11に取り込まれたけどな。

316:デフォルトの名無しさん
13/05/19 14:37:12.62
>>310
>>281のC#はGCを含んでるだろ

317:規制外板にてレス代行依頼中
13/05/19 15:13:13.94
すいません。
dup2の動きについて教えてください。
dup2(oldfd,newfd);
でoldfdとnewfdが同じ値の場合、dup2() は何もせず、newfd を返す。
というのが正しい処理だと思います。
そこで質問なのですが、昔の環境だと、
この処理はどのようになっていたのでしょうか?
URLリンク(www.freebsd.org)
に、(もし、指定された番号の記述子が使用中の場合、 dup2 は、まずその記述子を閉じたのち、 再割り当てします)。
とありますが、
昔の環境だと、dup2(oldfd,newfd)で同じファイルディスクリプタを
指定した場合、どのように動作していたのでしょうか?

318:デフォルトの名無しさん
13/05/19 15:38:02.15
>同じ値の場合、dup2() は何もせず、newfd を返す。
>というのが正しい処理だと思います

その根拠は?

319:規制外板にてレス代行依頼中
13/05/19 15:51:35.67
>>318
manに書いてあったためです。
URLリンク(linuxjm.sourceforge.jp)
URLリンク(www.jp.freebsd.org)
では逆に教えてください。
oldfdが有効である。
dup2の引数のoldfdとnewfdが同じ値である。
この場合に、dup2の戻り値がoldfdと違う場合は、どのような条件が
考えられるのでしょうか?

320:デフォルトの名無しさん
13/05/19 16:01:03.13
>>319
そのLinuxの方はエラーが無い限りoldを
返すと書いてあるので、エラーが起きたかバグがあるか
BSDの方はエラーがある場合は同様だけれど
エラーが無い場合について言及されていないので
何が返っても文句は言えない

それ以上のことはリンク先のISO/IEC 9945-1:1990
とやらを読まないとなんとも

321:デフォルトの名無しさん
13/05/19 18:17:05.12
>>306
C++11ならasyncとfuture::wait_for使うところかな

322:デフォルトの名無しさん
13/05/19 18:30:11.24
中断が必要なものにfutureねぇ。
メイン側に待つ以外のやることもないし。
ループ構造なんだから、ループ開始前に
取得した
時刻からの経過時間に閾値を設けて
タイムアウトさせる所じゃないの?

323:デフォルトの名無しさん
13/05/19 23:10:03.14
>>315
条件変数ってcondition variableのこと?
それならwin apiにもあったような

324:デフォルトの名無しさん
13/05/19 23:32:23.75
for ( auto i = 0; i < 3; i++ )

const int N = 10 * 1000;
for ( auto i = 0; i < N; i++ )
これらの場合の、iの型の推論はどう行われるの
上のiは0以上3未満だからunsigned
下のiはconst int Nとの比較するからint
って感じ?

325:デフォルトの名無しさん
13/05/19 23:36:31.46
0はintなのでintです
終了

326:デフォルトの名無しさん
13/05/20 03:08:47.68
autoで宣言する意味はないぞ。

327:デフォルトの名無しさん
13/05/20 03:20:55.82
ゼロオーバーヘッドさん現る

328:デフォルトの名無しさん
13/05/20 07:21:26.05
数値リテラルは型が分かりにくいのでautoにしない方がいい

329:デフォルトの名無しさん
13/05/20 11:08:50.04
イテレータはautoが有効活用される場面の1つだし、
>324くらいならautoでもいいんじゃね? と思ったりする

330:デフォルトの名無しさん
13/05/20 11:15:54.75
URLリンク(www32.ocn.ne.jp)

こういう例はautoで書いた方がいいだろう

331:デフォルトの名無しさん
13/05/20 18:39:16.79
サイズを指定するような定数や
ループインデックスに厳密な型の
意識が必要か?
むしろautoでお茶を濁したいところ。
実数だけ区別ついてれば構わん。

332:デフォルトの名無しさん
13/05/20 18:49:03.43
>>324のNがintじゃなかったら型の不一致でバグのもとだ
autoよりもdecltype(N)のほうがいいだろう

333:デフォルトの名無しさん
13/05/21 01:09:20.63
autoなんてゆとり機能使うの止めて

334:デフォルトの名無しさん
13/05/21 01:26:57.88
>>333
じゃあ>>330みたいなのをautoなしで書いてみてよ

335:デフォルトの名無しさん
13/05/21 01:38:22.92
プログラムなんてゆとり機能を使わずに
紙と鉛筆で何でも処理すべきだな

336:デフォルトの名無しさん
13/05/21 06:38:06.80
IT屋はみんなしねばいい
お前らがシステム構築して作業効率あげるから
ノルマが増えたり仕事を追われる人がたくさん出てくる
社会を破壊してるクズという自覚をもて

337:デフォルトの名無しさん
13/05/21 07:25:52.21
出たよ逆恨み

338:デフォルトの名無しさん
13/05/21 07:29:31.14
事実だな
うちも馬鹿が自慢のツール()作るのが生きがいにしてて
仕事を自動化するからノルマが増えてクソだるい
一度やるとツール使えない現場でも同じ仕事量もとめられんだよカスが

339:デフォルトの名無しさん
13/05/21 07:44:34.90
ざまあ

340:デフォルトの名無しさん
13/05/21 15:07:06.00
事実だな
馬鹿どもが平日毎日会社いくから俺まd

まあ誰も何もしないで他の会社や国だけ効率あがってったら
最終的に全員仕事追われるとは思うがな

341:デフォルトの名無しさん
13/05/21 21:12:51.25
visualc++ 2010 express でSendMessage使いたいんだけど
spy++がないからどういうメッセージか調べられないけど
どうすればいいかな?

342:片山博文MZパンク ◆0lBZNi.Q7evd
13/05/21 21:14:51.06
>>341
winspector spy
spyguru

343:デフォルトの名無しさん
13/05/21 21:18:12.48
>>341
>spy++がないからどういうメッセージか調べられないけど

まず、何をしたいのかよくわからない

344:デフォルトの名無しさん
13/05/21 21:37:54.75
>>341
Professional版買うのがいいと思うよ
無償版のC++でGUIアプリとか無理ゲー

345:デフォルトの名無しさん
13/05/21 21:40:02.19
インターフェイスなんか♯でいいだろ

346:デフォルトの名無しさん
13/05/21 22:40:29.69
VS2010でC++は確かプラットフォームSDK入れないと
ネイティブコンパイルできないんじゃなかったっけ。

347:デフォルトの名無しさん
13/05/21 22:41:39.68
ちなみにVSでProが必要なのは仕事でチーム開発する人とか
だけだと思うよ。基本機能はExpressで全部そろってる。
SDKとか追加で入れる手間はあるけど無料だし。

348:デフォルトの名無しさん
13/05/21 23:00:36.68
>>342-344 VC6ではWM_~をそのままコピペで使えたけど実力不足で
2010でSendMessageは難しそうです。レスありがとうございました。

349:デフォルトの名無しさん
13/05/21 23:42:22.88
>>347
仕事でもVSS使ってるとこなんてごく少数だろ。
それよりもMFC/ATLが必要でPro買ってるのがほとんどじゃねーか?

350:デフォルトの名無しさん
13/05/22 00:06:53.16
TFSは2012でExpressが出たでー

351:デフォルトの名無しさん
13/05/22 00:22:58.84
visualassistがないとコーディング時のストレスがやばいからpro買ってる

352:デフォルトの名無しさん
13/05/22 00:47:20.01
>>349
Proの評価版を入れてspy++を使えば良いんじゃ
評価版のspy++をexpressにコピペすればspy++が使えるんじゃないのか
評価期間終了したらコピペspy++を消せば良い

353:デフォルトの名無しさん
13/05/22 01:11:36.21
...アンカー間違えてる,orz
>>352>>341

354:デフォルトの名無しさん
13/05/22 03:12:57.95
そもそもSendMessageするのに
なんでSpy++ツールが必要なのかふしぎ

355:KUSO KOTE
13/05/22 03:26:33.98
>>346
Visual C++ 2010 ExpressでSDKが必要になるのは
64ビットコンパイルする時。

356:デフォルトの名無しさん
13/05/23 18:56:02.07
  / | | |     |i :ili、   l  |  |      ヽ ヽ!          /  ;イ
. /  | }|   ヽ\,__ili_i、   l   |  l     ハ    ┼   | ̄|  /   //
_,. イ! |  |      「 il|ヘ  |   |        !   |二|  | ̄|  レ/ / /
; i|l|i|リ        ,;iii yz ,z, |  |   l |     |  .|_|  | ̄|  レ  /
≠y、li|li|i      ″ '´ rぅxヾ寸、 ll   ! l      |   ┼ ノ  」     ./
气 `  ゙r;    ;  、、 ゝ‐′リii小从  |「`ヽ ヘ.{   _ク_  ヽ/    /
:ツ / 〃    {   \`‐=彡'″{^Yl}   | '.     `  |__|__| 二|二   /
=彡 ''"     丶         「゙弋ー、l  i      .|__|__| _|_  /  /
                     | 、 \ 、 |     / | | ヽ  |    /  ィ
         n  r        !|l  l ;;l :!        人    /イ//
           _,           | ||  l | | |       /  \    /
.     , /⌒ー'⌒ヽ.〈       ! l{  ' Vl |      ノ     \  /イ
    / /「「「「「「「「「「「い     jll{   Ⅵj|      __|_ ヽヽ   ./ ,.イ
\ ll /!i|i|i|i|i|i|i|i|i|i|i|i|} |i     /ノ   ,;i }`  、      | ー     /,、-'´/
  `ヽ{ レ'´  `く  ヽl| |i   /     ″′   ヽ     .| ヽー      /
     ヽ         ノ ′,;ii/        /            |       /
     ト- ==== ''" ,,;iill/       /       }       |      /
.      ノ        /iilil{        /       {      |      ``‐-、._
≧== 彡l||llx _ イ ∧         /     ,勿 ヽ     .|      _,、-‐'"
   ̄`xl|i彡'´    / ハ      〈    彡'´  ノ    | | | |    \
                                | | | |      \

357:デフォルトの名無しさん
13/05/23 22:22:51.29
>>352
お巡りさんこいつです。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch