1 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 21:04:54 ] C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。 前スレ C++相談室 part66 pc12.2ch.net/test/read.cgi/tech/1231640498/ ※part63, part66 が重複していたようですので part69 としました。
210 名前:189 [2009/05/14(木) 12:55:04 ] >>202 [0,1)区間となっています。0以上1未満ということです。 サイコロの乱数程度といってしまいましたが サイコロは関係ありません
211 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 13:25:26 ] >>208 windows.hをインクルードしてないとか言うなよ
212 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 13:29:26 ] だって、それを書けなんて誰も言ってないじゃないですか。
213 名前:189 [2009/05/14(木) 13:30:44 ] >>211 ご指摘ありがとうございます。 してませんでした。
214 名前:195 mailto:sage [2009/05/14(木) 13:41:16 ] >>212 コンパイラの名前とバージョンは?
215 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 23:50:55 ] すごく初歩的な質問ですが、C++で数字の小数点以下を 繰り上げるには何をつけたらいいんですか?
216 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 23:53:45 ] std::ceil()だろ Cにもある
217 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 23:55:09 ] つceil
218 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 00:16:28 ] それは「切り上げ」じゃん。ちゃんと答えてやれよ 因みに俺は小数点以下の「繰り上げ」なる概念について知らないので答えられん
219 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 00:17:50 ] くだらねえ…
220 名前:215 mailto:sage [2009/05/15(金) 00:21:12 ] おかげさまで解決しました。どうもありがとうございましたm(_ _)m
221 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 00:25:23 ] ちなみにceil()は負の数は0から離れる方向になるからな
222 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 09:52:02 ] >>203 それって偏りが出るよね。
223 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 10:02:11 ] RAND_MAXが極端に小さい環境ならね。 32767程度あれば、5461回が5462回になる程度のばらつきだよ。
224 名前:デフォルトの名無しさん [2009/05/15(金) 10:22:09 ] マジで⁉
225 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 10:23:33 ] >>222 サイコロに偏りが無いとでも?
226 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 10:45:40 ] 線型合同法は下位ビットの周期性が
227 名前:デフォルトの名無しさん [2009/05/15(金) 12:14:07 ] テンプレートのテクニックをまとめた、テンプレートの著書を教えてください。 知っているのは、modern C++ と、テンプレートテクニックという本です。 良いサイトや良い本の情報ください。
228 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 12:26:08 ] C++ Template Metaprogramming: Concepts, Tools, And Techniques From Boost And Beyond
229 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 12:53:18 ] マウスでいまクリック、もしくはドラッグしているファイルやディレクトリのパスを 取得する方法ってありますか?常駐ソフトのような形で、起動してからクリック、ドラッグ したファイルのパスをテキストログとして、出力するようなものを作りたいのですが・・・。
230 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 12:56:30 ] なんでこっちに来たんですか?
231 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 13:00:38 ] >>226 そんな乱数でもない数列をrand()という名前の関数の出力にする処理系が悪い。 ゴミだから早急に廃棄しろ。
232 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 13:39:39 ] >>225 製作工程の都合で、1,6の面積が微妙に大きいという話しか? それとも、くりぬかれた目による重心のずれ、密度の偏りの方か?
233 名前:デフォルトの名無しさん [2009/05/15(金) 13:55:52 ] >>228 ありがとうございます。 翻訳出てないんですかね……残念です。 C++の一番の特徴であるテンプレート関係の本が少ないのは何故? わかりやすくテクニックを知りたいのに
234 名前:デフォルトの名無しさん [2009/05/15(金) 15:54:15 ] すみませぬ JAVAから入っていまC++を勉強し始めたのですが、 C++で、配列で宣言した変数は、跡になってから自らがいくつの要素を持つ配列なのかチェックする方法ってありますか? Javaだと、 String str[] = new String[3] のように宣言した場合、 str.length を見れば要素数を見ることができますが、C++の場合は方法ありますか?
235 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 15:56:52 ] >>234 ないから素直にstd::vector使っとけ
236 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 15:57:32 ] >>234 sizeof(str) / sizeof(str[0]) で自分は調べてる
237 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 15:58:40 ] >>236 アホか
238 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 16:03:46 ] え?駄目なの 俺も>>236 を常用してるけど・・
239 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 16:07:00 ] 大丈夫、話が噛み合ってないだけだ。 char * foo = new char[3]; した場合は要素数を知る手段はない。 char foo[] = "abc"; した場合は要素数(≠文字数)を>236で得られる。
240 名前:234 [2009/05/15(金) 16:20:29 ] ありがとうございます。 C言語の場合、 配列を作ったら作りっぱなし、メモリのどこまでがその配列に割り当てられた場所かという情報はどこにもないという認識で良いですか? たとえば10要素の配列を作ったあとに20番目の要素にアクセスしようとすると、JAVAだとぬるぽが出て教えてくれますが、 Cの場合はシステムから見てそれが分からずに、20番(に相当する場所)を読みに行ったり、書き込んでしまう という理解で良いですか?
241 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 16:25:57 ] 良いです。 ちなみにここはC++のスレです。
242 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 16:39:03 ] >>240 そうです 運が良ければアプリ自体が吹っ飛んでくれますが運が悪いとそのままメモリ破壊して動き続けます なのでJavaしかできない人が集まってC++案件とかやるととても楽しいことになります
243 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 16:41:59 ] そもそも、10要素の配列を作ったあとに20番目の要素にアクセスしようとするような奴は 「Javaしかできない人」ではなく、「Javaもできない人」
244 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 16:47:00 ] >>240 大きな勘違いをしている。 >配列を作ったら作りっぱなし、メモリのどこまでがその配列に割り当てられた場所かという情報はどこにもないという認識で良いですか? 配列は、>36でサイズを得ることができる。 つまり、newなんていう外道なモノを使わずに、(昔なつかしの)固定長配列を使うかstd::vectorを使えと言うことだ。
245 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 20:48:50 ] Cに配列なんてなかった
246 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 21:16:41 ] >>245 何??
247 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 21:18:10 ] 何の話?
248 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 21:19:50 ] ついに狂ったか?
249 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 21:22:37 ] Cなんてなかった
250 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 21:50:31 ] コンピュータなんてなかった
251 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 21:52:47 ] 平行世界とつながったな
252 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 22:09:27 ] 仕事なんてなかった
253 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 22:00:39 ] ISOのC++の2003年の規格のJISは訳がひどいですね。 原文の構成もひどいけど。 規格をもっと読みやすくしたような、同じだけ詳しい本ってあるんでしょうか?
254 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 22:06:55 ] 無いから我慢して読め
255 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 22:15:03 ] 規格書の文章なんてどれもああいうもんだよ。 訳が酷いわけじゃない。
256 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 01:01:57 ] C++は規格自体がひどいから文章もひどくなる
257 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 01:56:44 ] C++の文法があまりに酷いもんで翻訳者もイライラしながら 訳してたんじゃないか?w
258 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 02:35:49 ] どのくらいメモリを使っているかという情報は型が持っているのだから 例えば、char[3] 型の最初の要素のアドレスをchar*型に代入したら もうメモリサイズがわからなくなるのは当然といえば当然。 char[3] 型を char[3] 型に代入する分にはちゃんとサイズがわかる。 という感じかしら
259 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 04:11:03 ] 変数の型も含めてすべてをクラスにってのがJava以降に導入されたもんだからね
260 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 04:25:19 ] それは別にJavaで初めてというわけじゃないだろ。
261 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 08:18:01 ] Javaも全てがクラスというわけでもないし。
262 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 08:57:46 ] 全てがクラスになる unlambdaやれば全てが関数だからオススメ。
263 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 09:49:55 ] C++の一行の文字数って標準仕様上、制限ありますか? またあるとして、現実的に気にした方が良いですか?
264 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 10:53:44 ] >>263 言語仕様としてはメモリの許す限りおk
265 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 10:56:29 ] メモリの許す限りという制限すらない無制限
266 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 11:16:18 ] ありがとうございます。 じゃあ気にせず行きます!
267 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 11:29:51 ] 80文字が一つの目安だな。 120文字超えてたらちょっとイラッとする。
268 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 11:32:26 ] クラスのメンバ関数の返り値は コピー返しでも可能ならconstにしろ とEffective C++で言われていましたが、 なぜか返り値がbool型だけはconst付けない風習がありません? 例: bool is_valid() const {return member?true:false;} この場合も返り値にconst付けた方が良いのでしょうか?
269 名前:デフォルトの名無しさん [2009/05/17(日) 11:34:17 ] 付けた方がいいよ。
270 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 11:54:31 ] >>268 メリットはなに?
271 名前:268 mailto:sage [2009/05/17(日) 11:58:07 ] >>269 そうですよね。ありがとうございます。 >>270 組み込み型の返り値を万が一変更するバカが居た場合の予防です。
272 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 12:12:37 ] >組み込み型の返り値を万が一変更する なんてできません。 馬鹿って言う人が馬鹿なんだぞw ちゃんと読もうぜ。
273 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 12:25:20 ] メリットは記述の統一感かな? テンプレート引数にするときにいいことってある? 自分は組み込み型にはconst付けない派だな
274 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 12:34:53 ] それ書いてあるのってEffecitve C++だっけ? Exceptionalかなんかのほうだった気がするが。
275 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 12:35:35 ] > テンプレート引数にするときにいいことってある? 全くない。 むしろ 組み込み型戻り値のconstは 環境によってはwarningやerrorになるから うっとうしいことこの上ない。
276 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 13:02:35 ] constな自クラス型参照メンバなんか使いだすと有りとあらゆる宣言にconstが波及して`err passing〜'の楽しい事になるんだよね。
277 名前:271 mailto:sage [2009/05/17(日) 13:06:18 ] >>272 > >組み込み型の返り値を万が一変更する > なんてできません。 有名どころのコンパイラならちゃんとコンパイルエラー出してくれるみたいですが 環境が違っても確実に予防してくれるのでしょうかね? >>274 Exceptional C++だったかもしれません。 >>275 gccやboostの実装でも確かに組み込み型の戻り値にconstは付いていないようですね。
278 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 13:59:47 ] そもそも「組み込み型の返り値を万が一変更する」って どういう意味なの?
279 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 14:00:46 ] public継承は分かる。 private継承も分かる。 ではprotected継承は? 使ったことある人います?(遊びじゃなく実用で。)
280 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 14:17:27 ] だからちゃんと嫁ってば。 Effecitve C++ 2ndの21節と29節に書いてあるのは、 非組み込み型のコピーを返す関数を左辺値として使われないように、 左辺値になり得る型が戻り値の場合はconst付けよーねってことと、 const宣言したメソッドがデータのハンドル(stringクラスのcharポインタとか)を 返却するときは戻り値にconst付けよーねってこと。 わざわざ押し入れからEffectiveC++取り出してきた俺に プッチンプリン買ってこいw >環境が違っても確実に予防してくれるのでしょうかね? ぶっ壊れたコンパイラの話をされても困る。
281 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 14:18:55 ] じゃあ俺はなめらかプリンでよろしく
282 名前:271 mailto:sage [2009/05/17(日) 14:33:58 ] >>280 サーセン。吊って来ます。 ありがとうございました。
283 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 14:35:03 ] constの同音異義語っぷりもなかなか見事なものだ
284 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 17:10:42 ] >>280 非組み込み型の戻り値について const つけてあると、右辺値参照として取れなくなっちゃいそう。 この指針は将来的に非推奨になるんじゃなかろうか?
285 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 17:52:26 ] そもそも右辺値参照自体が、 Effective C++で問題が広く知れ渡ったことで 実装されることになったんじゃないかな。 ぷらぷら界に多大な影響を与えた引き替えに、 次の版は全面改定だな。
286 名前:デフォルトの名無しさん [2009/05/17(日) 17:55:23 ] cppunitに関する質問ってありですか?
287 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 17:56:06 ] >>286 専用スレがあるから、まずはそっちで。 ↓ CPPUnitについて少し話そうかい pc12.2ch.net/test/read.cgi/tech/1042358524/
288 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 18:07:21 ] 互換性考えたら右辺const値のオブジェクト代入は右辺値参照を無視してコピー噛ますんじゃないかな
289 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 18:09:03 ] そう。だから右辺値参照を使って最適化しているつもりが、うっかり今までどおりの コピーになったりすることが考えられる。まぁ最適化の範疇と認識する分には問題には ならないんだろうけど。
290 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 19:44:11 ] 右辺値参照って、なんだかよく分からない。 C++0xが出れば解説も増えるかな?
291 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 20:32:36 ] 僕もよく解らないけど、関数の返すオブジェクトがコピーされるとき、 もとのオブジェクトが捨てられる場面で、 コピーコンストラクタを呼ばないでよりコストの低い破壊的なコピー、 つまりオブジェクトのメンバを移動することをするってことなんでしょ? ただそれだけでしょ?
292 名前:290 mailto:sage [2009/05/17(日) 21:12:34 ] 現在 標準C++のコンパイラの最適化機能として実装されている 戻値最適化 とは違うのかいな? C++ ラビリンス Return value and constructor ttp://www.fides.dti.ne.jp/~oka-t/cpplab-retval-ctor.html
293 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 21:12:36 ] そうそう、「移動」の概念(ムーブセマンティクス)を容易に実現するための言語仕様として考え出されたのが右辺値参照。 ほかに分かりやすい例を挙げるとしたらauto_ptr(の後継)がvectorに入れられるようになることとか、 functionやbindなどで各引数のconstや参照の有無の挙動を完全に再現したoperator ()を実現できるなんて効果がある。
294 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 21:27:43 ] 多次元配列の要素全てを任意の値で埋めたい場合 どう書くのが良いでしょうか。 1次元の場合は std::fill や std::fill_n が使えるのですが。 int a[10][10]; for(int i=0; i < 10; i++) for(int j=0; j < 10; j++) a[i][j] = 42; ということをしたいわけです。
295 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 21:28:25 ] >>292 最初の例や2番目のコピーコンストラクタ・代入演算子が呼ばれる例でもムーブセマンティクスは効く。 そこのコピーコンストラクタ・代入演算子の呼出が、ムーブコンストラクタ・代入演算子の呼出になる。 一般にムーブコンストラクタ代入演算子はコピーコンストラクタと違って、 それより遙かに低コストで例外の投げようもない実装になるので、より最適なコードになるとされる。
296 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 21:31:12 ] >>294 自分で書いてるじゃねーか。何が不満なの?
297 名前:デフォルトの名無しさん [2009/05/17(日) 21:34:04 ] 酒鬼薔薇
298 名前:290 mailto:sage [2009/05/17(日) 21:34:39 ] >>295 ほっほー。 そうなのかぁ。 ありがとう。C++0xが楽しみになって来たんだぜ。
299 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 21:46:45 ] いや普通に memset(a, 42, 100); で、いいんでない。string.h が使える環境なら それより最近、スザンヌとギャル曽根の区別が付かなくて困ってます 見分け方を教えてください
300 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 21:47:47 ] >>299 int に memset() して 42 になるとでも思ってんのか?
301 名前:299 mailto:sage [2009/05/17(日) 21:47:53 ] アンカー忘れ。>>294 な
302 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 21:51:12 ] >>299 これはひどい。
303 名前:299 mailto:sage [2009/05/17(日) 21:52:38 ] すまん。レス取り消し。int だったね 回線切って(ry
304 名前:299 mailto:sage [2009/05/17(日) 21:53:52 ] >>301-302 仕事速いな。暇人
305 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 22:04:38 ] >>304 お前の方がよっぽど暇人に見えるんだが
306 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 22:11:27 ] >>294 その配列だったら連続性が保証されてるから std::fill_n(&a[0][0], 100, 42) でいいだろ。
307 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 22:12:15 ] >>294 お好きなほうをどうぞ。 std::fill_n(&a[0][0], sizeof a / sizeof a[0][0], 42); namespace bll = boost::bind; std::for_each(a, a + sizeof a / sizeof a[0], bll::bind(std::fill_n<int*, std::size_t, int>, bll::_1, sizeof a[0] / sizeof a[0][0], 42));
308 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 22:23:24 ] >>307 std::fill_n(first, n, val) は [first, first + n) に対しての操作だから 要素数でOK。sizeof a / sizeof a[0][0] は冗長。
309 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 22:26:42 ] それも要素数・・・
310 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 22:28:14 ] g++にてテンプレートに暗黙の型変換を絡めたら分からなくなったので教えてください。 C++ code - 60 lines - codepad ttp://codepad.org/l7pocEaw このソースコードでは50行目hoge < short(1)の部分で error: no match for 'operator<' in 'hoge < 1' と言われてしまいます。どうやら暗黙の型変換がうまくいかないようです。 これを改変してForward declarationを無くして代わりにクラステンプレートの内部で friend 関数を定義することで回避できます。 C++ code - 49 lines - codepad ttp://codepad.org/F0VomJTk しかし、どうして前者のソースコードでは暗黙の型変換がうまくいかないのでしょうか?