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


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

C++相談室 part78



1 名前:v(^・^)v mailto:sage [2010/02/13(土) 23:18:03 ]
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part77
pc12.2ch.net/test/read.cgi/tech/1263556932/

185 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 23:16:36 ]
標準っていうか、プリインストールって言いたかったわけか。


186 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 23:18:22 ]
ち、違うよ。

187 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 00:57:43 ]
どっちもbccでうごかん。 
lock-freeの高速キューを作ってくれよ。
インラインアセンブラ・マクロの特殊構文の多用が原因と思われる。
windows 標準のcas命令のみで頼む。

Thread Safe Template Library
sourceforge.jp/projects/freshmeat_tstl/

Intel Threading Building Blocks
www.threadingbuildingblocks.org/

188 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 01:43:02 ]
bccなんてポンコツ捨てろよ

189 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 04:41:14 ]
bccは毎年新規で販売してるんだぞ。
コンパイル速度速くて良いんだこれは。

190 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 04:49:50 ]
httpサーバーなどへIf-Modified-Sinceをつける場合statでファイルの更新日付を
取得してどのように変換すればいいのでしょうか?

日本時間に直すサンプルは見かけるのですがGMTのまま文字列化する方法が
わかりません

191 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 08:08:13 ]
スレッドセーフキューがマルチスレッドの要なんです
マクロやアセンブラ使わずに書いてくれると喜ばれますよ

192 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 08:22:15 ]
STLportがスレッドセーフなSTLだった
これつかお

193 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 11:43:35 ]
わざわざいうな



194 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 15:34:49 ]
>>190
strftimeじゃできないの?

195 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 19:14:32 ]
プロの方はスマートポインタを使うのが基本とのことですが、例えば引数なんかも
hoge( shared_ptr<Test>& sp )といったかんじになるんでしょうか?
それとも受け渡しは生のポインタで行い、オブジェクト側でスマートポインタに格納ような
使い方ですか?

196 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 19:44:09 ]
参照渡しだよ

197 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 20:07:01 ]
STLportがbccでコンパイルできん

198 名前: ◆GWRSHcLrd6 mailto:sage [2010/02/18(木) 20:43:01 ]
>>195
僕はクラスのメンバ関数が前提なら、
関数を所有するクラスがオブジェクトをメンバ変数に保持するときはスマートポインタを、
一時的に使うだけなら参照で渡します。

>それとも受け渡しは生のポインタで行い、オブジェクト側でスマートポインタに格納ような
一番やっちゃいけない気がするんですけど・・・


199 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 21:44:30 ]
>>171 >>172
アドバイスありがとうございます。
手元のどの参考書見ても変数は使えないと書いてあってあれ?と思っていたしだいです。
Visual C++で使えないようなのでgccだけなんですね。

200 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 22:19:13 ]
>196 >19
ありがとうございます。
今試してみましたが同一ポインタを複数のshared_ptrに格納すると、
shared_ptrの数だけデストラクタが呼ばれてしまうんですね。
基本は参照で複製を作らないようにするということですね。

201 名前:デフォルトの名無しさん [2010/02/18(木) 22:21:29 ]
>>200
そう。
RAIIを徹底しろ。

202 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 22:21:59 ]
失礼しました。
>>196 >>198でした。

203 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 22:22:59 ]
g++やVC++などの有名どころのC++コンパイラについてお聞きしたいのですが、
コンパイル時定数を使った
ttp://codepad.org/EmT4J9d3
こんなifによる分岐があるとします。

このとき、成果物.exeはちゃんと最適化されて
分岐が消えるのでしょうか?

よろしくお願いします。




204 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 22:25:05 ]
codepadで使ってるg++とVC9.0では消失を確認

205 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 22:36:54 ]
ありがとうございます。
const bool ctc = 100; // compile-time constants

bool ctc = 100; // NOT compile-time constants
にしても同じでしょうか?
(volatileは付けません。)

お手数をおかけ致しますが、よろしくお願いします。



206 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 22:50:06 ]
const bool ctc = 100; // compile-time constants
に関しても同じ(キャストはちゃんとした方がいい)。
そもそも実行時への互換性を保たないと最適化というのはできないからね。

bool ctc = 100; // NOT compile-time constants
でも、単純にctcへの変更が無い事から最適化がなされた(204と同じ環境で)。
ただ、このケースは後のコードに完全に依存しているから考察する価値はあるのかどうか疑問だな。

207 名前:205 mailto:sage [2010/02/18(木) 23:02:24 ]
>>206
ご教示ありがとうございます。

そういったことは、どうやって調べればよいのでしょうか?
.asmを出力して調べているのでしょうか?


208 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 23:05:31 ]
>>207
そうだよ。

209 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 23:08:17 ]
YOUバイナリ読んじゃいなYO

210 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 23:08:49 ]
>>208
ありがとうございます。
asmからは逃げ回ってきているので全然読めそうにありません。
勉強しなければなりませんね。。。

211 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 23:09:33 ]
別に勉強しなくても片手間にasmの命令リストと見比べてるだけだけどね。

212 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 23:15:53 ]
asmってコンパイラやアセンブラによって
扱いが違うからやだ

213 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 23:16:19 ]
なんかアセンブリって難しそうなイメージある
低級だから追いかけるのが大変なだけで難しい構文とかはむしろ少ないんだろうけど・・・



214 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 23:21:24 ]
アセンブリ自体は簡単だけど、他の言語で出来ることをアセンブリでするとか考え出すと難しい

215 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 23:23:20 ]
アセンブリで全部済むならプログラミング言語なんて必要ないわけで

216 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 23:27:53 ]
そう考えるとC言語とか
移植性もあってすげえ言語だな。
今更だけど。



217 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 00:45:23 ]
>>216
cが優秀じゃなくてcコンパイラ作った人が優秀なだけだな

218 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 01:11:59 ]
規格作ったやつだ。
Cコンパイラは、上司が監視して下っ端が要求通り作ってるだけ。
初めの設計図が一番。
たとえば、アニメは動画マンという超低賃金のやつらがやっているが
宮崎駿や原作漫画家がいるから開発できるんだ。

219 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 01:18:03 ]
>>218
現存するコンパイラは確かに規格ありきで作り始めてそうだけど、元々は
たくさんの環境向けに作られていた C の共通部分を元に規格化されたんだから、
先にコンパイラ作ってた人が下っ端ということはないだろう。

220 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 01:33:47 ]
>>219
まあ初期のC言語確立やコンパイラ作ったような人たちは
上も下もねーだろうな
小さいチームで多少リーダー的存在がいるくらいだろうし
そういう中で試行錯誤しながらとかだろうし

その後の各環境ごとのコンパイラ開発はC言語そのものがあるんだし
それにあわせちゃえばいいので作業だろうな
(でもそれなりに知識は要るので下っ端ってわけじゃないだろうけど

221 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 02:48:53 ]
>195
そんな渡し方したら危険じゃない?


222 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 05:22:11 ]
ファイルIO( open close load)がかなり時間かかるから
要求を並列で出しておくと時間短縮するね。
細かい多数のファイルで2倍-3倍くらいの向上。

223 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 06:34:44 ]
5倍を目指してくれ



224 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 07:29:30 ]
files=20

225 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 12:47:04 ]
dmr にあやまれ。

226 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 14:45:10 ]
How many files(0-15)?■

227 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 15:58:57 ]
じじい乙

228 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 17:54:32 ]
ここの人ってワイルドカード欲しい時に何使ってるの?
boost使ってる人なら正規表現なんだろうけど、
使って無い人が気になる。

229 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 18:03:44 ]
windows api か
正規表現で代用

230 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 18:21:07 ]
俺は魔法だなあ

231 名前:デフォルトの名無しさん [2010/02/19(金) 21:12:55 ]
そもそもワイルドカードと正規表現がどうつながるんだ?

232 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 21:14:55 ]
ワイルドカードでできる事は正規表現でできるだろ

233 名前:デフォルトの名無しさん [2010/02/19(金) 21:31:27 ]
C++ でできる事はアセンブラでもできるんだが
そういう問題ではあるまい?



234 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 21:33:36 ]
何を言ってるんだ…

235 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 21:36:52 ]
ポインタが使える人、暇な人に質問です。
下のコードはメモリの確保と解放がきちんとなされてるでしょうか?
codepad.org/GUSgjZWM

236 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 21:39:35 ]
異常なし

237 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 21:45:42 ]
暇な人とは失礼な

改めていわれなくてもこんなところ見てる段階で暇・・・

238 名前:デフォルトの名無しさん [2010/02/19(金) 22:05:30 ]
>>233
正規表現が無い環境だってあるじゃない。
外部ライブラリも不可とか。
その例で言うとC++が使えない環境という事。
「C++使えないなんてあるわけないじゃん」とは言えまい?

239 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 22:10:36 ]
>>238
C++使えないって、組み込み系とかですか?
なんかろくなコンパイラがないってことなんでしょうか。

240 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 22:19:26 ]
>>239
例えばの話です。
組み込み系なんてサッパリ^O^

241 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 22:23:34 ]
なんで2つの言葉のつながりから、環境がどうこうの話になるんだ。
話の流れ方に病的なものを感じる。

242 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 22:24:52 ]
病的っていうか、知ったばかりの単語を中学生が使いたがってるだけな雰囲気

243 名前:デフォルトの名無しさん [2010/02/19(金) 22:26:19 ]
>>238
あったねー、OS にワイルドカードがなくてアプリが独自にサポートしてたケース
アプリごとに微妙に解釈が違ってて脱力ずっこけが何度もあった

>>239
C++ 自体はどのシステムにでも使えるぞ、C++ で HEX や HDL が作れるわけで



244 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 22:26:46 ]
>>235
パッと見だがリークすると思う

t = new Test;
を解放してない

delete t;
が必要じゃない?

245 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 22:28:24 ]
聞く前にop new/deleteでカウントするぐらいはやってみようよ

246 名前:235 mailto:sage [2010/02/19(金) 23:07:57 ]
>>244
見落としてました。
>>245
new、deleteをオーバーライドってことでしょうか?
やってみます。

どうもありがとです。

247 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 23:49:29 ]
Test *New(int index0,int index1,int index2);
の途中で失敗した場合のリークも


248 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 01:39:58 ]
worker threadパターンを実装したいので
既存の関数を実効させる部分をテンプレートで
実装したいのですが、どのように書けばいいのか
わかりません。

たとえば、f1、f2、f3を同じworke threadクラスで
扱うにはどのようにコーディングするのが正しいのでしょうか

249 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 01:47:04 ]
スレッドを起動させっぱなしにするのがワーカースレッドっていうのか。

>>176のunsigned WINAPI fnc(void *n);もワーカースレッドだな。参考にしてくれよ。

250 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 01:48:51 ]
>>176は一つのキューに挿入と取り出しを行い、3スレッド並列で空いたら
スレッドからデータを取り出し処理を行う。

251 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 01:51:15 ]
キューが貯まったら各関数に通知したら、ビジーループを防げるけど
面倒なので100ms毎に確認しに行くようになっている。

252 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 11:59:32 ]
プログラムする時のやり方聞きたいんだが
いきなり書き始める?
きっちり考えて書く?
書き始めたとしても、ヘッダでインラインで書きまくって、動作したらcppと分割する?
それとも最初からわけて書く?

253 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 12:28:31 ]
自分の場合大まかな方針は決めてから書く
ただ、確実にこれはいるなってデータや関数は
あまり考えないでも書く

ヘッダにインラインで書くのはコンパイル時間との兼ね合い
大きいプログラムを書くときは最初から分ける

俺のオススメは
2回同じことを書くまでは出来るだけ抽象化しない
逆に2回同じことを書いた時点で必ず抽象化する
こうすると、バグの発生源が重複しないので大分バグをつぶしやすくなる
ただ、多人数での開発には使いにくいだろうが



254 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 12:30:19 ]
>>252
まず絶対UMLとシーケンス図を書く
その後細かいところはフローチャートを書く
2、3時間でできることだから必ず行う

その後1回で製造する。



255 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 12:42:07 ]
>>252
いきなり書く。
パフォーマンスを計る。
もう一度書く。
ライブラリ化する。


256 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 12:51:21 ]
いきなり書くやつは下っ端だな。与えられる仕様をただこなすだけ。
ビル・橋・道路の設計者ではなく、日雇いの土木作業員。

257 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 12:58:58 ]
まぁ、いきなり「本番」のコードを書くのは無謀だと思うけれども、
頭の中で色々練っている最中に、その助けとしてちょこちょこ手を動かすことはある。
メモというかスケッチというか、そんな感じのコード。
で、その一部が断片的に「本番」に流用されることならある。

258 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 14:52:22 ]
すらすらとコードが書けないときは何かが間違ってるというのはあるねぇ

259 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 15:00:58 ]
図に書く
スクリプトで書く
遅いところをC/C++に置き換える
寝る

260 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 15:08:48 ]
まずコメントを先に書く
トイレに行く
コードを書きながら飯を食べる
コメントを直す

261 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 15:11:11 ]
冷静に考えればいいだけだろうがばかどもが

262 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 15:13:31 ]
やりたい事を考える
下っ端に薄給で作らせる

263 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 17:57:01 ]
継続での脱出みたいなことってC++で出来ますか?
たとえばこんな関数があったときに、どこかでret=trueになったら
一番最初にfを呼び出した箇所へ飛んで関数を終わらせたい

bool f(){
bool ret=false;
//処理によってret=trueになったりならなかったり
for(int i=0;i<n;++i){ret|=f();}
return ret;
}
gotoで抜けられるのは今いる関数内のループだけだと思うので無理?



264 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 18:00:50 ]
>>263
無理です。


265 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 18:07:53 ]
>>263
たとえば、例外的なことがおきたときにプログラムの実行を中断したいというのであれば、
例外が使える。
だけど、例外は例外的な事以外に乱用すると非常に見通しの悪いプログラムになるから注意。


266 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 20:34:56 ]
>>263
bool f(){
//処理によってret=trueになったりならなかったり
for(int i=0;i<n;++i){if(f())return true;}
return false;
}

267 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 23:19:09 ]
makeって使ったことがないのですが、
勉強した方がいいのでしょうか。


268 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 23:24:24 ]
いい

269 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 23:25:15 ]
IDEに任せっきりでmakeってのから逃げまくっていたのですが、
やっぱり勉強します。

ありがとうございます。

270 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 00:14:10 ]
tbbを実用で使い出したけど、メモリ関係の例外が出まくるぞ。
いつもではなくたまに。どうみてもエラーになり得ないところで例外。
そのためにtbb_allocがついているのか。
メモリ管理をtbb専用で全部置き換えれば直るんですか。

271 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 00:29:16 ]
>270
>いつもではなくたまに。どうみてもエラーになり得ないところで例外。
使い方が間違ってて排他処理で失敗してるだけじゃないの?

272 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 00:49:38 ]
そうか。試しに全書き換えでやってみる。

273 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 01:16:49 ]
#define allocator scalable_allocator
とやると、
std::allocator がstd::scalable_allocatorになる。
std::allocator がtbb::scalable_allocatorにはどすればいい。
::がdefineにかけない。




274 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 01:19:09 ]
#define std tbbにしたらエラーでまくり。当然全関数対応しているわけはなく。

275 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 01:33:30 ]
namespace std {
 typedef xxx::myallocator myallocator;
}
#define allocator myallocator

276 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 01:47:52 ]
できないです

template<typename T> class scalable_allocator;

となっていて、テンプレート引数が必要と出ます

277 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 01:53:11 ]
単純なdefineの文字置き換えで出来ないかと考え中。
stdをstd0に書き換えて、tbbをstdにして、ここでヘッダを読み込み
std0をstdに戻せば、善さげなきはする。
別名で存在している関数をdefineで置き換えたらいけそう

278 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 02:06:20 ]
駄目だった 再定義とか出る

279 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 02:08:02 ]
バグの温床になりそうだな

280 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 02:25:01 ]
悪夢だ・・・

281 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 02:26:17 ]
アロケータの置き換えはTBBのチュートリアルにやり方が書いてある

282 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 02:44:48 ]
面倒になってきたので標準装備のみで0から作るぜ

283 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 02:57:58 ]
std::vector<int, tbb::scalable_allocator<int> >などとその都度指定する、
それをtypedefするというのは駄目なの?正統派だと思うのだけど。

C++0xなら
template<typename T>
using vector_tbb<T> = std::vector<tbb::scalable_allocator<T>>;
と書いて、vector_tbb<int>とかvector_tbb<std::string>とか書けるようになるんだけど、
まだ未来の話……。



284 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 06:26:39 ]
if文で真偽値を評価すると真になる要素がいくつあるか数えるのを短く書きたいです。

vector<int> a;
// ;;;;;;;

int n = 0;
for(int i = 0; i < a.size(); ++i)
if( a[i] )
n++;

これを、
int n = std::count( a.begin(), a.end(), ?? );
ぐらいに短く書きたいのですが、なにかいい方法あります

285 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 06:30:24 ]
ファンクタ使えば?






[ 続きを読む ] / [ 携帯版 ]

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

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