1 名前:デフォルトの名無しさん [2009/01/11(日) 11:21:38 ] C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。 前スレ C++相談室 part65 pc11.2ch.net/test/read.cgi/tech/1230341243/
345 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 21:31:28 ] 日本語でいいです。
346 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 21:38:59 ] 検索できないし改頁潰れてるしときどき訳間違ってるし脚注抜けてるし JISなんていりません
347 名前:デフォルトの名無しさん [2009/04/02(木) 21:42:18 ] 検索できないのは板杉だな
348 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 21:43:08 ] 私検索できるPDFもってるけど。
349 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 21:52:04 ] >>348 それってダウンロードすると白く塗りつぶされるんでしょ。
350 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 21:58:02 ] >>349 うん。 でもクラック済み。 検索も印刷も普通にできるよ。
351 名前:デフォルトの名無しさん [2009/04/02(木) 22:20:03 ] 昔はクラックなんかせずとも正規購入できたのに
352 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 22:25:25 ] 今のJISのサイトのは検索できるよ ただし日本語とアラビア数字に限る。アルファベットは不可。何でこうなったんだろうね… おれはJISのでもいいと思うけど、URLが決まらないのでこういうところで紹介するには不向きだと思う テンプレに手順を書いてくれればいいんだけどね
353 名前:デフォルトの名無しさん mailto:hage [2009/04/02(木) 22:25:26 ] 実際に、ライブラリレベルじゃなくて、アプリKションレベルのものを書くとき、 mediatorパターンみたいな感じになっちゃって、 mediatorに相当するクラスのヘッダを、他のクラスから必ずincludeするような設計になっちゃったんだけど、 これって間違ってる? C++の話題とはズレてごめんね>禿
354 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 22:30:52 ] 検索できないってどういうこと? 私はLinux用のアクロバットリーダーのバージョン8を使っていますが検索機能付いてます。 JISの文書自体は文字単位で範囲選択できるので検索できない理由がわからないのですが?
355 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 22:33:35 ] JISのPDFは本文の文字の一部が画像になってる
356 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 22:46:44 ] どこですか?
357 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 22:48:12 ] いやいや、少し前のは全ページ画像だった。その代わりダウンロードしても見られたけど。
358 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 22:55:06 ] どういうこと?ってここで言われてもなぁ…JISに言ってくれよJISに
359 名前:デフォルトの名無しさん [2009/04/02(木) 23:00:37 ] > ※最新バージョン9の使用は今しばらくお待ちください。 オマエ、ソレハナイダロウ
360 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 23:35:07 ] >>359 俺もそれ思ったwwww えええええええ!?!?ってオモタ
361 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 23:53:54 ] 今日は肛門疾患の話はないのか、寂しいな。
362 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 22:20:49 ] 痔には乙痔湯! 喪前らも、服用しる
363 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 00:41:54 ] memchrと strchrって何が違うの? 長さが既知だとすると性能一緒?
364 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 00:43:52 ] >>363 memchrの方が速いと思われ。
365 名前:デフォルトの名無しさん [2009/04/04(土) 00:47:26 ] >>285 309 :動け動けウゴウゴ2ちゃんねる :09/03/30 23:16 ID:SGwSF7rQ おねがいします。 【板名】 プログラム技術 【スレ名】C++相談室 part66 【スレのURL】pc12.2ch.net/test/read.cgi/tech/1231640498/ 【名前欄】 【メール欄】 【本文】↓ すみませんが、
366 名前:デフォルトの名無しさん [2009/04/04(土) 00:54:00 ] >>363 NULLで止まらないか止まるか
367 名前:デフォルトの名無しさん [2009/04/04(土) 00:54:07 ] 286 :動け動けウゴウゴ2ちゃんねる :09/03/30 20:26 ID:SGwSF7rQ おねがいします。 【板名】 プログラム技術 【スレ名】C++相談室 part66 【スレのURL】pc12.2ch.net/test/read.cgi/tech/1231640498/ 【名前欄】 【メール欄】 【本文】↓ あと、同じ型で複数の変数を定義する時のコンマは副作用完了点でしょうか? たとえば、以下のコードは正しく動きますか?
368 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 00:58:31 ] >>366 '\0' と NULL をごっちゃにするな。
369 名前:デフォルトの名無しさん [2009/04/04(土) 01:06:43 ] イヒヒ
370 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 01:11:04 ] null character
371 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 01:16:09 ] >>366 速度的にはどうなんですかね?
372 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 01:29:43 ] strchar 一文字単位で文字列終了文字判定 memchar カウンタがアップの判定だけ どんなコードに落ちるかはCPUのアーキテクチャ次第
373 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 01:32:54 ] >>363 速度は実測が基本。
374 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 12:00:41 ] >>371 全く変わらない。
375 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 13:33:02 ] 少なくともmemchrがstrchrより遅くなることはないから 出来る限りmemchrを使う 基本的にmem○○とstr○○は常にmem○○優先
376 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 13:39:43 ] いいえ。
377 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 13:48:56 ] memchrの方が2倍ぐらい遅いよ
378 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 14:04:58 ] >>377 根拠、或いは計測条件の提示を宜しく。
379 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 14:27:00 ] 二倍なんてもんじゃないよ
380 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 17:16:31 ] FreeBSD 7.1-STABLE、Celeron 700MHz(i386) で計測したらstrchrよりmemchrのほうが5パーセントほど 遅いという結果になりました。 どちらの関数もアセンブリ言語で書かれてあります。
381 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 19:10:53 ] std::string str="hoge"; const char * const p = str.c_str(); こういう使い方ってして良いの? このケースではまあ最初からp="hoge"とすれば良いことになるけどもね。
382 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 19:13:10 ] c_strは使ってはいけない
383 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 19:13:33 ] >>382 str.c_str()がだめってこと? どうして?
384 名前:381 mailto:sage [2009/04/04(土) 19:17:19 ] std::string str="hoge"; const char * const p = str.c_str(); str="piyopiyo"; const char * const q = str.c_str(); std::cout << reinterpret_cast<unsigned long>(p) << "\n" << reinterpret_cast<unsigned long>(q) << std::endl; 結果:pとqが違う値。 このようにstrが変わった時にpが無効になってる可能性はあるよね。 あるサンプルソースで似たようなコードがあって疑問だった。
385 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 19:17:31 ] >>382 はバカ。
386 名前:381 mailto:sage [2009/04/04(土) 19:18:31 ] >>385 じゃあ気にしないようにするわ。
387 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 20:39:03 ] c_str() や data() が返すポンストコインタは 次に const でないメンバ関数が呼ばれるまでの間のみ有効という「時限式」なので ポインタは保持しないほうがいいよっていうのが一般的な話。 わかってやるなら >>381 自体は違法じゃない。
388 名前:381 mailto:sage [2009/04/04(土) 20:40:56 ] >>387 分かりやすい説明ありがとう! 理解した。
389 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 01:03:50 ] std::string str(""); ってやってるヤツがいるんだが std::stringはデフォルトコンストラクタでは空文字列にしてくれることが仕様上保証されているんだよね? つまりstr("")は無駄だよね?
390 名前:デフォルトの名無しさん [2009/04/05(日) 01:12:17 ] >>389 お前のようにデフォルトコンストラクタの仕様を知らないアホにも空文字列で初期化されることがわかるから無駄じゃない。
391 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 01:14:46 ] >>389 動作速度の点では無駄。
392 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 01:19:08 ] >>391 だよね。ありがと。
393 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 01:19:47 ] 速度は実測が基本。
394 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 01:22:11 ] 優秀なコンパイラで強い最適化オプションを指定していると、勝手にそれくらいは修正してくれないだろうか?
395 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 01:22:33 ] そもそも速度を気にするようなところでstd::stringを使うのが間違い。 動作速度でstr("")が無駄と言う奴は馬鹿。
396 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 01:23:24 ] >>395 お前も馬鹿。
397 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 01:24:10 ] コロッとだまされる>>392 が一番馬鹿
398 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 01:26:00 ] >>394 優秀じゃなくてもふつうそれくらいするよ。
399 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 01:30:00 ] >>397 何がおかしいの? 具体的に言ってみ、お前の脳で言えるのなら。
400 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 01:33:20 ] >>399 str("")とデフォルトコンストラクタでは速度に差が無いから>>391 はウソ。 以上。
401 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 01:35:56 ] もうお前ら全員安価つけてやれ、ホント、マジで頼むから。
402 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 01:37:19 ] 5レス連続でアンカが付いている件について
403 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 01:38:58 ] >>402 いや、その前も含めて全部。 ・・・と思ったら俺自身安価付けてなかった ごめん吊ってくる。
404 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 01:42:10 ] >>400 残念ながら同じバイナリに落ち着かない以上、速度に差がないとはいえない。 出直しておいで坊や。
405 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 01:43:40 ] 何か必死だな。
406 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 01:47:07 ] >>390 が真理だな。
407 名前:デフォルトの名無しさん [2009/04/05(日) 02:24:22 ] 仲良くしなよ
408 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 02:30:49 ] 文字列リテラルの使いまわしを認めないコンパイルオプションつけたらちょっとバイナリが増える・・・・・かな?
409 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 02:55:07 ] >>404 同じ()バイナリ()落ち着く() スイーツ()ですか
410 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 02:57:50 ] 結論 str("")は無駄ではない。
411 名前:デフォルトの名無しさん [2009/04/05(日) 02:58:05 ] ねーよ
412 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 03:01:33 ] std::stringはデフォルトコンストラクタでは空文字列にしてくれることが仕様上保証されているんだよね? なんて醜態晒すくらいなら std::string str(""); と書く方がよほどスマート。
413 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 04:02:57 ] 次期規格ではstring()はstring("")に委譲する実装になるだろうから そうなれば本当に速度に差はなくなるだろう 今は知らん
414 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 04:48:42 ] 普通に、こう考えろ char* str = NULL; char* str = ""; 同じか?w
415 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 07:26:06 ] 全角のアルファベットを打つ奴はゆとり
416 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 07:47:48 ] 全角ってなんですか?
417 名前:デフォルトの名無しさん [2009/04/05(日) 08:47:43 ] >>353 > mediatorに相当するクラスのヘッダ の中では前方宣言するのが吉。 そうしないと冗長すぎる依存関係になってしまう。 アプリケーション全体が10kくらいなら気にしないのも有りかも。
418 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 09:12:22 ] C言語でWEB操作したいです 証券会社にログインして株価を監視して自動売買が目標です まずはC言語でWEBページを開く方法を教えてください
419 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 09:58:03 ] >>413 > 次期規格ではstring()はstring("")に委譲する実装になるだろうから なんでそんなとこ変わるの?
420 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 10:40:31 ] >>418 WebProg板へどうぞ。
421 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 13:12:14 ] >>418 C Web Download をgoogle検索 あきらめろ
422 名前:デフォルトの名無しさん [2009/04/05(日) 13:32:16 ] >>418 pc12.2ch.net/test/read.cgi/tech/1182323579/
423 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 18:03:11 ] デストラクタはpublicで宣言するものだよね? privateで宣言すると、 まあ普通にコンパイルエラーになるんだけど、 特殊な状況でprivateなデストラクタってある? なんか俺の知らないイディオムでありそうな気がしてきたんだが。
424 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 18:16:00 ] deleteをオーバーロードしてるとかじゃないとコンパイルすら通らなくね?
425 名前:423 mailto:sage [2009/04/05(日) 18:18:06 ] >>424 そう、通らない。 でも例によってC++は深遠だからさ、 俺が知らないだけで便利なイディオムがあったりするかな〜って興味が出てきた。
426 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 18:21:59 ] とりあえずnewで生成してみろよ
427 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 18:22:20 ] 自動変数や静的変数としては使えないが、newすることは出来る。 deleteはクラスのメンバ関数から出来る。 だから、使えないことはない。具体的にどう役立つのかは分からんが。
428 名前:423 mailto:sage [2009/04/05(日) 18:25:28 ] あ〜、newで作るのか。 なるほどね。
429 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 18:26:30 ] Effective C++にて const char* const authorName="ScottMeyers";//方式1 const std::string authorName="ScottMeyers";//方式2 この2つが紹介されていたんだけど、結局どっちが良いの? 本によれば方式2の方が良いよ的な書き方されていたんだけど、どうして方式2が良いのか分からない。
430 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 18:35:41 ] class MyClass{}; として、 boost::shared_ptr<MyClass> p(new MyClass); だと大丈夫なのに boost::shared_ptr<MyClass> p=new MyClass; だとダメなのは何故でしょうか? 私は宣言時に (初期化値)とするのと =初期化値とするのは 等価にコンストラクタを呼び出す物だと思っていたので驚きました。
431 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 18:38:14 ] >>430 boost::shared_ptr<MyClass> p=boost::shared_ptr<MyClass>(new MyClass);
432 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 18:41:49 ] >>430 コンストラクタに explicit がついていると > boost::shared_ptr<MyClass> p=new MyClass; は不可能になる。 例えば class MyClassA { MyClassA(int n); }; class MyClassB { explicit MyClassB(int n); }; となっていた場合、 MyClassA a(3); // OK MyClassA a = 3; // OK MyClassB b(3); // OK MyClassB b = 3; // NG となる。 また、 void myFuncA(MyClassA a); void myFuncB(MyClassB b); という関数があった場合 myFuncA(3); // OK myFuncB(3); // NG となる。myFuncB(MyClassB(3)) は可能。
433 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 18:42:16 ] >>431 それはキャストですよね。 つまりキャストしないとダメなんでしょうか? なぜですか? …あ、もしかして boost::shared_ptr<MyClass>のコンストラクタが explicitになっているということでしょうか?
434 名前:433 mailto:sage [2009/04/05(日) 18:43:20 ] >>432 すみません。 再読込してませんでした(> <) 失礼致しました。 explicitですね。 もうちょっと勉強して出直してきます。
435 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 18:44:05 ] >>430 pc12.2ch.net/test/read.cgi/tech/1232367742/106-109
436 名前:432 mailto:sage [2009/04/05(日) 18:44:11 ] ごめん、>>432 の例だとコンストラクタがprivateになってるね。public: を付け足して読んでほしい。
437 名前:433 mailto:sage [2009/04/05(日) 18:51:15 ] >>435-436 ありがとうございます。 >newしたらすぐにスマートポインタにセットさせるのが基本。 これがRAIIってやつでしょうか?
438 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 18:52:46 ] >>423 カスタムデリータを使うときにデストラクタをprivateにして隠して、カスタムデリータ外から勝手に呼べなくする。
439 名前:423 mailto:sage [2009/04/05(日) 19:03:36 ] >>438 あーなるほどね。 やっぱあるんだ。 サンクス
440 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 21:04:47 ] 仮想関数として指定するキーワードvirtualは、どれだけ付けるのが正しい? 例えば class Base { public: virtual void m_func(){std::cout << "Base m_func!" << std::endl;}; Base(){std::cout << "Base Constructor!" << std::endl;}; virtual ~Base(){std::cout << "Base Destructor!" << std::endl;}; }; class Derived : public Base { public: void m_func(){std::cout << "Derived m_func!" << std::endl;}; Derived(){std::cout << "Derived Constructor!" << std::endl;}; virtual ~Derived(){std::cout << "Derived Destructor!" << std::endl;}; }; class Derived_Derived : public Derived { public: void m_func(){std::cout << "Derived_Derived m_func!" << std::endl;}; Derived_Derived(){std::cout << "Derived_Derived Constructor!" << std::endl;}; virtual ~Derived_Derived(){std::cout << "Derived_Derived Destructor!" << std::endl;}; };
441 名前:440 mailto:sage [2009/04/05(日) 21:06:11 ] んで呼び出す時は void foo() { Base* p=new Derived; Base* q=new Derived_Derived; Derived* r=new Derived_Derived; p->m_func(); q->m_func(); r->m_func(); delete p; delete q; delete r; } このように、俺はBaseのm_func()にしかキーワードvirtualを付けていないんだが、これであってる? pc12.2ch.net/test/read.cgi/win/1237525619/127
442 名前:440 mailto:sage [2009/04/05(日) 21:09:30 ] ごめん 別スレで無礼者がいたから そいつへレスしようとしてたら 間違ってこっちにリンク張っちまった。>>441 マジごめん。
443 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 21:17:07 ] virtualつけたメンバ関数は、派生クラスではvirtualをつけてようがつけてまいが関係なく 仮想関数になる DerivedもDerived_Derivedもvirtualはつけてもつけなくても一緒
444 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 21:50:28 ] >>443 ありがとう。 ちなみにどちらでも同じということだが、その場合 virtualは付ける方が良いとか付けない方が良いとかそういう慣習があったりする?
445 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 21:54:58 ] >>440 のコードを Baseでvirtualを付けておき、DerivedとDerived_Derivedではvirtual付けない版と、 Baseでvirtualを付けておき、DerivedとDerived_Derivedでもvirtual付ける版と 両方を作ってビルドしてみた。 g++ -O2 〜〜.cpp としたのだが、挙動は一緒みたいだが、バイナリは違うものになった。 何故?