- 1 名前:デフォルトの名無しさん [04/09/14 07:16:41]
- ここでは他のC++スレよりもより一層と高いレベルでの情報交換・体験談などを行うスレです。
我こそはC++プロフェッショナルだという方の書き込みをお待ちしております。
- 411 名前:デフォルトの名無しさん [2005/08/31(水) 13:10:36 ]
- >>407
NULLの代わりとかあるの? それはVisualC++7.1で使える?
- 412 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 21:17:05 ]
- >>411
0をポインタにstatic_castしたら、NULLポインタになる。 もちろんそのポインタを整数型にreinterpret_castしても0になるとは限らない。
- 413 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 22:21:26 ]
- >>411
0
- 414 名前:デフォルトの名無しさん mailto:sage [2005/09/01(木) 00:49:14 ]
- 結局な〜んも作れないのがC++上級者でつね。
- 415 名前:デフォルトの名無しさん mailto:sage [2005/09/01(木) 01:08:15 ]
- ヤケ気味に上級者を煽れた時代が俺にもあった。
そこに自分も含まれるようになった今は、 もう憎々しげに上級者を煽る意味がなくなってしまったけど。
- 416 名前:デフォルトの名無しさん mailto:sage [2005/09/01(木) 01:12:12 ]
- ハイハイ
- 417 名前:デフォルトの名無しさん mailto:sage [2005/09/01(木) 04:08:19 ]
- 下級な人は煽りの切れ味も下級だね。
- 418 名前:C++入門者 mailto:sage マジレスキボンヌ [2005/09/01(木) 23:04:59 ]
- 正直C++上級者がこんなスレに来るとは思えないのだが…
上級者ならさらりと使いこなすC++のテクって何? 多重継承?仮想継承?メンバ変数・関数のポインタ? テンプレート?
- 419 名前:デフォルトの名無しさん mailto:sage [2005/09/01(木) 23:22:26 ]
- >>418
俺はその中ではテンプレートを1番良く使っている。 当然だがほかのも使わないわけではない。 もちろん俺が上級者である保証は何処にもない。
- 420 名前:デフォルトの名無しさん mailto:sage [2005/09/02(金) 00:49:15 ]
- >>418
コルーチン
- 421 名前:デフォルトの名無しさん mailto:sage [2005/09/02(金) 00:51:49 ]
- >>418
delegate
- 422 名前:デフォルトの名無しさん mailto:sage [2005/09/02(金) 00:52:38 ]
- >>418
自己書き換え
- 423 名前:デフォルトの名無しさん mailto:sage [2005/09/02(金) 00:54:35 ]
- >>418
Gap Buffer Algorithm.
- 424 名前:デフォルトの名無しさん mailto:sage [2005/09/02(金) 01:07:45 ]
- >>418
ハァ?
- 425 名前:デフォルトの名無しさん mailto:sage [2005/09/02(金) 09:13:34 ]
- >>418
> 上級者ならさらりと使いこなすC++のテクって何? > 多重継承?仮想継承?メンバ変数・関数のポインタ?テンプレート? それはテクニックなのか?
- 426 名前:デフォルトの名無しさん mailto:sage [2005/09/02(金) 10:40:37 ]
- うちに面接に来るのはコピーコンストラクタ、代入演算子の定義も書けない人ばかり
- 427 名前:デフォルトの名無しさん mailto:sage [2005/09/02(金) 19:37:30 ]
- いくらなんでも「ばかり」ってのはネタだろう。
- 428 名前:デフォルトの名無しさん mailto:sage [2005/09/02(金) 19:59:25 ]
- そりゃそうだろうけど相当多いんだろうくらいに呼んでやろうよ。
- 429 名前:デフォルトの名無しさん mailto:sage [2005/09/02(金) 19:59:38 ]
- 2ちゃんねるってこんな突っ込み入れる奴ばかり
- 430 名前:デフォルトの名無しさん mailto:sage [2005/09/02(金) 21:25:54 ]
- >>423
おぉ!Gap Buffer Algorithm 伝説のテクを使える者がおったとは。これは驚きじゃ。
- 431 名前:デフォルトの名無しさん mailto:sage [2005/09/02(金) 21:33:32 ]
- >>420
コルーチンとは粋だね。
- 432 名前:デフォルトの名無しさん mailto:sage [2005/09/02(金) 21:43:13 ]
- >>430
gap_vector だね。知ってるよ。
- 433 名前:デフォルトの名無しさん mailto:sage [2005/09/02(金) 22:16:47 ]
- Gap Buffer など、C++上級者なら当然知ってるよ!
- 434 名前:デフォルトの名無しさん mailto:sage [2005/09/02(金) 22:41:25 ]
- ちゅうことで、結局な〜んも作れないのが、ここのC++上級者でした。
- 435 名前:デフォルトの名無しさん mailto:sage [2005/09/02(金) 22:58:45 ]
- 扇るなら、C++の上級者にふさわしい煽りを。
- 436 名前:デフォルトの名無しさん mailto:sage [2005/09/02(金) 23:02:37 ]
- お〜い扇風機持って来いや
- 437 名前:デフォルトの名無しさん mailto:sage [2005/09/02(金) 23:07:34 ]
- みなさんコンピュータサイエンスをどこで学ばれたのですか?独学ですか?
- 438 名前:デフォルトの名無しさん mailto:sage [2005/09/02(金) 23:19:02 ]
- きらめき高校
- 439 名前:デフォルトの名無しさん mailto:sage [2005/09/02(金) 23:34:53 ]
- ものつくり大学
- 440 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 00:28:51 ]
- >>428
そう読んだ上で「そんなに多いってのはネタだろう」と言ってるのだが・・・。
- 441 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 00:33:06 ]
- >>440
流れを読め
- 442 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 00:38:36 ]
- 最近色々なブログでやってる
最小なんとか点とかメモとかってこんな感じか? template <class T> class normal { protected: int call_me(int i) const { return static_cast<T const&>(*this)(i); } }; template <class T> class memo { protected: int call_me(int i) const { std::map<int, int>::const_iterator ci = memo_.find(i); return ci == memo_.end() ? memo_[i] = static_cast<T const&>(*this)(i) : ci->second ; } private: mutable std::map<int, int> memo_; };
- 443 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 00:39:08 ]
- template <template <class> class Fix>
class fib : Fix<fib> { public: int operator () (int i) const { return i <= 1 ? 1 : call_me(i-2) + call_me(i-1); } }; int main() { fib<normal>()(20); fib<memo>()(20); }
- 444 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 01:52:01 ]
- >>442
なんか面白そうなコードだね。 親クラスと子クラスを反復する再帰関数なんて初めて見た。 潮騒キボンヌ
- 445 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 01:58:38 ]
- いいか、おまいら。
いくらC++を極めても嫁は見つからないんだ。 ただ頭が禿げるだけだ。それを忘れるな。
- 446 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 02:01:06 ]
- そういやSE or PGでハゲってみたことないんだが。
実際少ないんかねえ。
- 447 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 02:13:33 ]
- スキルの毛の数は反比例する傾向にある。
- 448 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 03:21:43 ]
- >>441
どんな流れ? 都合が悪いからありもしない流れをでっちあげたってのは無しね。
- 449 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 03:31:33 ]
- 髪の毛の流れを読みきった奴が真の勝利者だと思う
- 450 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 03:49:03 ]
- 量が少ないとバーコードになるから
簡単に流れが読める
- 451 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 07:27:51 ]
- >>423
調べてみました。こんなの初めて知りました。おいらは上級者と思っていたのが恥ずかしい...
- 452 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 07:32:57 ]
- >>450
君はこちら側の人間ではないようだ。
- 453 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 10:00:50 ]
- >>452
よう、ハゲチャビン。
- 454 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 15:21:32 ]
- 選ばれた上級者だけがハゲるからな
gaped bufferはemacsで使ってたやつだ C++じゃなくても普通に使える
- 455 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 18:58:25 ]
- NUEのエディタは(Gapped) Double Linked Line Bufferだった。
- 456 名前:デフォルトの名無しさん [2005/09/03(土) 18:59:31 ]
- 最近、いい感じに禿げてきた
- 457 名前:442 mailto:sage [2005/09/03(土) 19:28:56 ]
- >>444
元ネタは Let's Boost の人のブログ。 再帰関数をメモ化したりする汎用的な仕組み、のような感じか?
- 458 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 20:21:51 ]
- >>457
さんくす。Boostでしたか。
- 459 名前:デフォルトの名無しさん mailto:sage [2005/09/03(土) 20:33:47 ]
- フィボナッチ数列みたいに再帰で何度も使う数値をメモしておくってことかな。
一般化したという点で面白いね。
- 460 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 00:12:00 ]
- Boost使うヤツは、ヘタレ。
上級者なら、あまりにも高度すぎて自分にしか使用できない 自作ライブラリを使うのが常識だろ?
- 461 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 00:42:34 ]
- >>419-423
ありがと。 聞いたこともない用語が出てきたので満足です。 C++を使いこなすことを目標にします
- 462 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 00:46:55 ]
- >>461
おいらを目標に頑張れや。
- 463 名前:デフォルトの名無しさん [2005/09/04(日) 22:48:26 ]
- こんばんわ、質問があります。
環境C++6.0 windowsxp 今、ハードディスクやCDの容量を調べるプログラムを組んでいます。 GetDiskFreeSpaceExをつかって、ハードディスクの使用量と空き容量は入手できたのですが、 焼かれたCDの空き容量が0になってしまうのです。マイコンピュータのCDドライブのところから、 プロパティを開くと空き容量が表示されるのですが、プログラムでそれを入手することが出来ないのです。 基本的な質問ですが、知恵をお貸し願えませんでしょうか? よろしくお願いします。
- 464 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 22:53:47 ]
- >>463
なんでプログラムできない奴って日本語できないんだろ? つうかスレ違いだろうが
- 465 名前:デフォルトの名無しさん mailto:sage [2005/09/04(日) 23:44:15 ]
- >>410
すげえ。ぬるぽがついにC++にも。
- 466 名前:デフォルトの名無しさん mailto:sage [2005/09/05(月) 00:20:48 ]
- >>465
ガッ!
- 467 名前:デフォルトの名無しさん mailto:sage [2005/09/07(水) 00:56:10 ]
- ギッ!
- 468 名前:デフォルトの名無しさん mailto:sage [2005/09/07(水) 04:29:54 ]
- ヌッ!
- 469 名前:デフォルトの名無しさん mailto:sage [2005/09/07(水) 04:48:36 ]
- ぬ
ぽ る
- 470 名前:デフォルトの名無しさん mailto:sage [2005/09/07(水) 18:17:00 ]
- >>469
ガッ
- 471 名前:デフォルトの名無しさん mailto:sage [2005/09/07(水) 22:41:12 ]
- >>469は「ぬ ぽ る」な訳だが
- 472 名前:デフォルトの名無しさん mailto:sage [2005/09/08(木) 21:59:53 ]
- つ縦読み
- 473 名前:デフォルトの名無しさん [2005/10/24(月) 10:40:55 ]
- 小数点2位以下を四捨五入したいのですが、もっともシンプルでかつ高速なコードを教えてください。
- 474 名前:デフォルトの名無しさん mailto:sage [2005/10/24(月) 11:22:57 ]
- >>473
何もしなくても四捨五入して表示されるが printf("%.2f", 1.235);
- 475 名前:デフォルトの名無しさん mailto:sage [2005/10/24(月) 11:24:32 ]
- あ、C++スレなのに失礼
- 476 名前:デフォルトの名無しさん mailto:sage [2005/10/24(月) 12:33:02 ]
- double round45(double val, int digit) {
char buf[20]; sprintf(buf, "%.*f", digit, val); return atof(buf); }
- 477 名前:デフォルトの名無しさん mailto:sage [2005/10/24(月) 17:57:54 ]
- このスレまだあったんだ
- 478 名前:デフォルトの名無しさん mailto:age [2005/11/04(金) 15:34:31 ]
- 【C++】template 統合スレ -- Part6
pc8.2ch.net/test/read.cgi/tech/1101384692/1001 の後継スレとして使わせて貰うことにしました。
- 479 名前:デフォルトの名無しさん mailto:sage [2005/11/04(金) 18:59:53 ]
- >>442-443
これってチョットいじっただけじゃコンパイルとおらない? typeのミスマッチっていわれるんだけど。
- 480 名前:デフォルトの名無しさん mailto:sage [2005/11/04(金) 19:34:59 ]
- >>479
とりあえず call_me を this->call_me にすれば?
- 481 名前:デフォルトの名無しさん mailto:sage [2005/11/04(金) 20:05:54 ]
- >>480
だめみたい。 thisをつけると、const class fib<normal> has no member named call_meっていわれちゃう。 templateのしたクラスのcall_meを呼んでくれないみたい
- 482 名前:デフォルトの名無しさん mailto:sage [2005/11/04(金) 21:11:50 ]
- >>481
class fib : Fix<fib> => class fib : Fix< fib<Fix> > これで、 ttp://www.comeaucomputing.com/tryitout/ のコンパイラでは通った。
- 483 名前:デフォルトの名無しさん mailto:sage [2005/11/05(土) 07:47:56 ]
- >>482
gccでは通らないぽい。どこがおかしいのやら
- 484 名前:デフォルトの名無しさん mailto:sage [2005/11/05(土) 23:54:35 ]
- template <template <class> class Fix>
class fib : protected Fix< fib<Fix> > だな。public継承でもいいけど。 要はダウンキャストもprivate継承ではできない
- 485 名前:デフォルトの名無しさん mailto:sage [2005/11/06(日) 07:39:13 ]
- typedef Fix<fib<Fix> > ct;
… …ct:call_me(…
- 486 名前:デフォルトの名無しさん mailto:sage [2005/11/06(日) 09:47:16 ]
- >>484
>>485 サンクス。できました
- 487 名前:デフォルトの名無しさん mailto:sage [2005/11/06(日) 10:38:13 ]
- COMについての質問はここでいいですか?
- 488 名前:487 mailto:sage [2005/11/06(日) 18:13:45 ]
- 自己解決しました
- 489 名前:デフォルトの名無しさん [2005/11/07(月) 11:50:43 ]
- ポインタの静的型と、仮想関数の振る舞いについて教えてください。
struct A { virtual void f(); }; struct B { virtual void f(); }; struct C: public A, public B {}; C* pc = new C; pc->f(); // (1) A::f() と B::f() のどちらか分からないのでコンパイルエラー A* pa = pc; pa->f(); // (2) A::f() がコールされる B* pb = pc; pb->f(); // (3) B::f() がコールされる struct D: public A, public B { virtual void f(); }; D* pd = new D; pd->f(); // (4) D::f() がコールされる pa = pd; pa->f(); // (5) D::f() がコールされる pb = pd; pb->f(); // (6) D::f() がコールされる struct C の仮想関数テーブルの f() のエントリはどうなっているのでしょう? 派生クラスが仮想関数をオーバライドしない場合、このエントリは基底クラスの 関数ポインタがそのままコピーされると思います。しかし、A::f と B::f のど ちらを採用すべきかコンパイル時に決定できないはずです。 ところが上記(2)のように、動的型が struct C であっても、静的型を struct A とするとコンパイルが通り A::f() がコールされます。動的型の struct C の仮 想関数テーブルの f() のエントリは決定できていないはずなのに、何故 (2)(3) のような呼び分けができるのでしょう? 実際 struct D のように f() をオーバライドすると、静的型に関係なく動的型 の仮想関数がコールされるので、f() のエントリは1つだと思うのですが。 どういうカラクリになっているのでしょう?
- 490 名前:デフォルトの名無しさん mailto:sage [2005/11/07(月) 12:12:19 ]
- >>489
「fのエントリは二つあって、Dでは両方が同じ関数を指している。」という実装しか思いつかないな。 調べてみる。
- 491 名前:デフォルトの名無しさん mailto:sage [2005/11/07(月) 13:12:52 ]
- #include <iostream>
#include <cassert> struct A { virtual void f(){ std::cout << "A::f\n";} }; struct B { virtual void f(){ std::cout << "B::f\n";} }; struct C : A, B {}; struct D : A, B { void f(){ std::cout << "D::f\n";} }; int main(void) { C c; D d; A *pca = &c; B *pcb = &c; A *pda = &d; B *pdb = &d; typedef void (*pfun_t)(); pfun_t pcfa = **(pfun_t **)pca; pfun_t pcfb = **(pfun_t **)pcb; pfun_t pdfa = **(pfun_t **)pda; pfun_t pdfb = **(pfun_t **)pdb; pcfa(); pcfb(); pdfa(); pdfb(); assert(pdfa != pdfb); } 結果(g++-mingw): A::f B::f D::f D::f よって、C/D共にfには二つのエントリがあって、 Dの場合は、二つの異なるD::fのラッパが入っていると判る。
- 492 名前:デフォルトの名無しさん [2005/11/09(水) 00:29:56 ]
- Pentium4にやさしいプログラミング手法を教えてください
- 493 名前:デフォルトの名無しさん mailto:sage [2005/11/09(水) 03:52:17 ]
- >>492
C++じゃなくてアセンブラになっちゃうけど消費電力を抑える為に halt や nop を多用するのがいいと思うよ。
- 494 名前:デフォルトの名無しさん [2005/11/09(水) 04:40:12 ]
- __asmでnopを入れればいいのですか?
- 495 名前:デフォルトの名無しさん mailto:sage [2005/11/09(水) 05:17:38 ]
- >>494
アホを真に受けるなよw ったく知ったかぶり君は迷惑だよね。
- 496 名前:デフォルトの名無しさん mailto:sage [2005/11/09(水) 06:54:19 ]
- >>495
もし>>493を知ったかぶりと思っているなら お前の日本語読解力の方がずっとアホだと思うよ。
- 497 名前:デフォルトの名無しさん mailto:sage [2005/11/09(水) 08:19:55 ]
- >>492
ifは極力使わない。 forをつかえ。
- 498 名前:デフォルトの名無しさん mailto:sage [2005/11/09(水) 09:21:08 ]
- for(int i = 0; condition && i < 1; ++i){
..... }
- 499 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 04:55:32 ]
- BOOLよりboolを使ったほうが処理速度が速くなるっていうのは本当ですか?
- 500 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 05:05:31 ]
- いいえ、それだけの情報ではなんともいえません。
- 501 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 05:13:00 ]
- BOOL(4バイト)とbool(1バイト)のことです
- 502 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 06:30:30 ]
- うがー、それだけの情報ではなんともいえません。
- 503 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 06:55:30 ]
- 環境によって違うということですか?
vc7.1でコンパイルしたんですが win2000です
- 504 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 07:51:15 ]
- >>499
>>503 BOOLかboolかで速さが違うかどうかはわからないが、 BOOLはintのtypedefで、boolはC++組み込み型だからbool(true/false)を使う方がよい。
- 505 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 07:58:03 ]
- なるほど、そうなのですか
ありがとうございました
- 506 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 08:25:29 ]
- BOOL は真偽値じゃない
とりあえずMSDN行って GetMessage()の戻り値見てくれば解る あんな代物とbool型を同一視したら相当痛いミスを連発することになる。 MSのAPIの引数と戻り値以外には使わないほうが良い。 さらにsizeof(bool)は1と決まっているわけじゃない。 コンパイラによってはsizeof(bool)==4の場合もある。
- 507 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 08:51:22 ]
- ただ、現実問題として、boolは0/1しか取らないから
整数型やポインタ型の値をboolに代入しようとすると、若干の演算が必要になる。 例えば、戻り値が0か0以外かが判定できれば良いだけの場合でも int型の関数だと return n; で足りるところを bool型の関数にすると return n != 0; に相当するコードが必要になる。 そのため、VC++では最適化の警告が出せるようになっている。
- 508 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 09:55:29 ]
- >>501
普通、bool はintと同じサイズ( =BOOLと同じサイズ )になるぞ。
- 509 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 10:05:22 ]
- 「普通」の意味がわからんが、BCB6ではintが4でboolが1だな。
- 510 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 10:18:26 ]
- >>509
アレ? borland でもデフォルトでは bool は int と同じサイズだったと思うが・・・ bool を1バイトにするっていうコンパイルオプションが指定されてない?
- 511 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 10:28:00 ]
- boolを使うと、ビットセット系のニモニックが生成されて分岐が省略できる可能性もある。
>507が指摘したケースだと、どうせ呼び出し側でも判断が入るから二重ロジックに成るかも知れんが、 inline関数なら逆に呼び出し側を巻き込んで最適化されるから同じことだね。
|

|