1 名前:デフォルトの名無しさん [04/09/14 07:16:41] ここでは他のC++スレよりもより一層と高いレベルでの情報交換・体験談などを行うスレです。 我こそはC++プロフェッショナルだという方の書き込みをお待ちしております。
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関数なら逆に呼び出し側を巻き込んで最適化されるから同じことだね。
512 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 10:49:04 ] っていうかboolの実装って普通0か1のどちらかっていう判断してる? 俺は0(false)か、0以外の全て(true)のどちらかっていう判断だと思った。 void Hoge(bool hoge) { if (hoge == true) {} } みたいな時、hoge != false(0) としてのコードを吐くのが普通じゃないの? だからこそ我々はC時代のように "BOOLVAR == TRUEと書いてはいけない。BOOLVAR != FALSEと書け" みたいなルールに縛られず boolvar == true っていうコードも合法になるもんだと思ってたんだけど。
513 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 14:20:37 ] >>507 > ただ、現実問題として、boolは0/1しか取らないから trueかfalseです。!に対してそれぞれが逆元。 integral promotionがあるとそれぞれ1と0になる。 ちなみにここは上級者スレです。
514 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 16:08:18 ] >>508 実装依存ということは承知してるが、 GCC4 も VC7.1 も sizeof(bool)==1 なわけだが。 こんなのも。 ttp://gcc.gnu.org/ml/gcc-bugs/2001-07/msg00186.html それと、bool より BOOL を(パフォーマンスの理由で) 推奨してる環境もあるにはある。個人的には嫌だけど。
515 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 17:33:35 ] >>512 >boolvar == true っていうコードも合法になるもんだと思ってたんだけど。 合法ですが、間抜けです。
516 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 19:57:32 ] >>514 Microsoft Specific In Visual C++4.2, the Standard C++ header files contained a typedef that equated bool with int. In Visual C++ 5.0 and later, bool is implemented as a built-in type with a size of 1 byte. That means that for Visual C++ 4.2, a call of sizeof(bool) yields 4, while in Visual C++ 5.0 and later, the same call yields 1. This can cause memory corruption problems if you have defined structure members of type bool in Visual C++ 4.2 and are mixing object files (OBJ) and/or DLLs built with the 4.2 and 5.0 or later compilers. ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclang/html/_langref_bool.asp
517 名前:デフォルトの名無しさん mailto:sage [2005/11/11(金) 00:51:31 ] >>514 最近は sizeof(bool)==1 が主流なのか。知らなかったお。(^ω^) >それと、bool より BOOL を(パフォーマンスの理由で) >推奨してる環境もあるにはある。個人的には嫌だけど。 それもちょっと微妙だね。sizeof(bool)==1 な処理系ならCPUが苦手な バイトアクセスでもメモリアクセス量が減る bool のほうが多分トータルの パフォーマンスでは上だろうし。
518 名前:デフォルトの名無しさん mailto:sage [2005/11/11(金) 04:24:45 ] >>517 まあ、CPUが苦手どころか 4 バイト未満の整数型をダイレクトに 扱う命令を持ってないからで。しかも無駄なメモリアクセスは極力 省いてキャッシュレイテンシまで時に考えなきゃならんような環境の ことなんで、無視していいかと。 つうか、素直に sizeof(bool)==4 にしろよ、ってスマン愚痴だ。
519 名前:デフォルトの名無しさん mailto:sage [2005/11/11(金) 07:22:23 ] vector<bool>なんてのを想定したんじゃない? > sizeof → 1 bitsetってのもまあ微妙なアレだし
520 名前:デフォルトの名無しさん mailto:sage [2005/11/11(金) 08:02:00 ] メモリが遅いって話ならそれこそ最大限コンパクトにして キャッシュに乗ってる可能性を高くしたほうがいいじゃん
521 名前:デフォルトの名無しさん mailto:sage [2005/11/11(金) 08:19:22 ] vector<bool> は特殊化されているので関係ない
522 名前:デフォルトの名無しさん [2006/01/22(日) 14:12:46 ] o(%)。 // ○(%)oジュワッ
523 名前:デフォルトの名無しさん [2006/02/08(水) 11:15:21 ] 上級者の会話か?
524 名前:仕様書無しさん mailto:sage [2006/02/08(水) 11:18:47 ] >>523 (脳内)上級者の集うスレでは?
525 名前:デフォルトの名無しさん mailto:sage [2006/02/08(水) 21:49:16 ] >>523 上級者が集まったからと言って上級な会話をするとは限りませんし、 上級者にしかその真意がわからない上級な会話なのかもしれません。
526 名前:デフォルトの名無しさん [2006/04/28(金) 09:41:06 ] 上級者はいなくなったようですね
527 名前:デフォルトの名無しさん [2006/04/28(金) 11:12:31 ] 上級者というからにはもっとこうOS技術とか、デッドロックの事例とその解決とかについて 議論するのではないのか?
528 名前:デフォルトの名無しさん mailto:sage [2006/04/28(金) 14:47:19 ] >>527 デッドロック回避にはオーストリッチアルゴリズム。マジお勧め。
529 名前:デフォルトの名無しさん mailto:sage [2006/04/28(金) 15:19:59 ] レース状態やスタベーションについての議論もしよう。
530 名前:デフォルトの名無しさん mailto:sage [2006/04/28(金) 16:08:20 ] >>528 なにもしないってかw
531 名前:デフォルトの名無しさん mailto:sage [2006/04/28(金) 17:14:50 ] レース下着でマスターベーションについて
532 名前:デフォルトの名無しさん mailto:sage [2006/04/29(土) 04:44:48 ] OS 技術が上級? 酔ってるから超ウケた。 上級な OS 技術と、当たり前すぎてあほらしい OS 技術があると思うのだが。
533 名前:デフォルトの名無しさん [2006/04/29(土) 06:06:22 ] 酔ってるな
534 名前:デフォルトの名無しさん mailto:sage [2006/04/29(土) 15:12:17 ] >>527 それはあえて言うなら「プログラミング上級者」とかの類であって「C++上級者」とはズレがあるのでは?
535 名前:デフォルトの名無しさん [2006/04/30(日) 02:32:53 ] ではC++上級者は何ができるのですか?
536 名前:デフォルトの名無しさん mailto:sage [2006/04/30(日) 02:51:36 ] Cでも書けるコード/アルゴリズムを 「C++らしく」書くことが出来ます。たぶん。 俺は上級者じゃないので無理です。
537 名前:デフォルトの名無しさん mailto:sage [2006/04/30(日) 06:21:32 ] 上級者 初級者でもわかるコードを書く 初級者 上級者でもわからないコードを書く
538 名前:デフォルトの名無しさん mailto:sage [2006/04/30(日) 09:48:40 ] ここは「上級者とは何か」を議論するスレですか?
539 名前:デフォルトの名無しさん mailto:sage [2006/04/30(日) 10:28:11 ] 自らの上級しゃっぷりをアピールするスレです。
540 名前:デフォルトの名無しさん mailto:sage [2006/04/30(日) 11:13:52 ] 初心者が微妙にスレ自体をひがんでるな そんな暇があったら勉強しなよ
541 名前:デフォルトの名無しさん [2006/04/30(日) 11:47:14 ] 夢の相互リンク プログラム技術上級スレ pc8.2ch.net/test/read.cgi/tech/1141409198/l50
542 名前:デフォルトの名無しさん [2006/04/30(日) 19:51:31 ] 自称上級者の集まるスレってここでしょうか?
543 名前:デフォルトの名無しさん mailto:sage [2006/04/30(日) 22:34:38 ] そうですね、例えばあなたとか…
544 名前:デフォルトの名無しさん mailto:sage [2006/04/30(日) 23:35:48 ] 俺、俺だよ俺!
545 名前:デフォルトの名無しさん [2006/05/06(土) 20:23:30 ] pngのCRCの計算をするコードを教えてください。
546 名前:デフォルトの名無しさん [2006/05/06(土) 20:27:47 ] >>545 ソース嫁
547 名前:デフォルトの名無しさん mailto:sage [2006/05/06(土) 20:41:34 ] >>546 わかりませんので 上級者の知恵をお借りしに来たのです。
548 名前:デフォルトの名無しさん mailto:sage [2006/05/06(土) 20:46:14 ] >547 ここは上級者以外立入禁止だ。
549 名前:デフォルトの名無しさん mailto:sage [2006/05/06(土) 20:55:00 ] >>548 わからないくせに偉ぶっている人
550 名前:デフォルトの名無しさん mailto:sage [2006/05/06(土) 21:18:22 ] 俺は上級者だが、わからないものはわからないのだ。
551 名前:デフォルトの名無しさん [2006/05/06(土) 21:31:30 ] ここは自称上級者同士が褒め称えあうスレです。
552 名前:545 mailto:sage [2006/05/06(土) 21:37:24 ] googleで探したらあったYO
553 名前:デフォルトの名無しさん mailto:sage [2006/05/06(土) 21:44:00 ] これで君も上級者だ。
554 名前:デフォルトの名無しさん mailto:sage [2006/05/06(土) 22:01:37 ] >>545 C++とは関係ない話だろとマジレス。
555 名前:デフォルトの名無しさん [2006/05/07(日) 20:31:55 ] クックック。遂に極めたぞ。
556 名前:デフォルトの名無しさん mailto:sage [2006/05/08(月) 00:29:22 ] 残念ながら555が居たのは、まだ入り口だったのであった
557 名前:デフォルトの名無しさん mailto:sage [2006/05/08(月) 00:33:38 ] 極めたってどういう状態を指すんだ?DQN臭い。
558 名前:デフォルトの名無しさん mailto:sage [2006/05/08(月) 00:51:30 ] >>557 きっと typedef あたりの使い方を極めたんだよ。
559 名前:デフォルトの名無しさん mailto:sage [2006/05/08(月) 00:52:35 ] >>558 ・・・そうか・・・
560 名前:デフォルトの名無しさん mailto:sage [2006/05/08(月) 08:08:49 ] 555の痛さはネタ臭いけど、 極めるという言葉に過剰反応している557の痛さは素っぽいな。
561 名前:デフォルトの名無しさん mailto:sage [2006/05/08(月) 16:42:06 ] まぁ真実は>>556 が突いている
562 名前:デフォルトの名無しさん [2006/06/02(金) 08:40:30 ] 皆さんのタブのサイズを教えてください
563 名前:デフォルトの名無しさん mailto:sage [2006/06/02(金) 11:22:42 ] TABは0.5を利用
564 名前:デフォルトの名無しさん mailto:sage [2006/06/02(金) 12:28:03 ] タブは8
565 名前:神楽坂 [2006/06/02(金) 15:17:23 ] フィルタドライバの作り方で 聞きたいことがあるんで 来てみたのだが...... だめみたいだな、 ここは。
566 名前:デフォルトの名無しさん mailto:sage [2006/06/02(金) 15:39:01 ] ここはスレタイが荒してくれといっているようなものだからな。 隔離スレというか。
567 名前:デフォルトの名無しさん mailto:sage [2006/06/02(金) 18:28:26 ] いかにも荒らし本人が書きそうな「見限りレス」だな。
568 名前:デフォルトの名無しさん mailto:sage [2006/06/02(金) 22:56:26 ] >>565 なんのフィルタドライバを作りたいのかぐらい書けよ。 つーか、お前は本当は聞きたいことの説明すらできんのだろ? 素直んなれよ、な?
569 名前:デフォルトの名無しさん [2006/06/03(土) 13:28:56 ] 気付いたけどここには低能しかいないようだな
570 名前:デフォルトの名無しさん mailto:sage [2006/06/03(土) 13:43:42 ] >>569 お前と俺と〜は〜
571 名前:デフォルトの名無しさん mailto:sage [2006/06/03(土) 14:20:10 ] 超上級者だったらもうちょいゆとりがあっただろう
572 名前:デフォルトの名無しさん mailto:sage [2006/06/03(土) 15:44:22 ] >>568 ・訊いても無駄だといいながら訊きたい内容を書く ・でもその内容は不明確なまま ・しかもスレ違いの予感 ・つか、なにしろコテハン 恐らく、自分よりバカ (に見える連中) がいて 嬉しかったんだろう。
573 名前:デフォルトの名無しさん mailto:sage [2006/06/03(土) 19:12:18 ] ここは、C++上級者が集まるスレであって >>565 ごときが来るような場所ではない。
574 名前:デフォルトの名無しさん mailto:sage [2006/06/03(土) 19:29:08 ] まぁ、能無しが「おもらい」しに来るスレではないよな。
575 名前:デフォルトの名無しさん mailto:sage [2006/06/03(土) 19:46:15 ] 盛り上がって参りました!
576 名前:デフォルトの名無しさん mailto:sage [2006/07/01(土) 05:03:15 ] マ板でもっとも典型的なネタスレのひとつ
577 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 22:14:12 ] コメントを // にしました。 これで俺も上級者の仲間入り。
578 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 23:08:47 ] 赤飯炊かなきゃな
579 名前:デフォルトの名無しさん [2006/07/07(金) 15:55:26 ] 上級者さんのお知恵をお借りしたいのですが。。 C++とDirectShowでビデオキャプチャ+圧縮保存のコードを書いております。 ボタンクリック時に、圧縮に使用するコーディックのプロパティ画面を開くようにしたいのですが、方法が検討つきません。 WindowsMediaVideo9とMEPG4 ご存知の方、いらっしゃいましたらご助力願います。 宜しくお願い致します。
580 名前:デフォルトの名無しさん mailto:sage [2006/07/08(土) 15:08:16 ] >>579 それC++関係ないだろ。
581 名前:デフォルトの名無しさん mailto:sage [2006/09/01(金) 19:22:44 ] >>580 ≪関係ない≫だと?