- 1 名前:デフォルトの名無しさん [2007/07/26(木) 00:33:07 ]
- C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。 テンプレその他 >>2-15 付近参照 前スレ class C++相談室lt;part56gt; pc11.2ch.net/test/read.cgi/tech/1170343752/l50
- 582 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 23:14:20 ]
- >>580
#inlucde これは試したソースではちゃんとしてるんだろうか?
- 583 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 23:20:50 ]
- インライン関数は、普通ヘッダに定義を書く。
- 584 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 23:24:30 ]
- >>580
inline関数はその呼び出された場所に展開されることが前提になりますから、 呼び出し元でその定義が分かるようにしなければなりません。 したがって、通常はヘッダ内で定義し、そのヘッダを#includeします。 >>580の場合は、test.hで定義するのが適当かと思います。
- 585 名前:580 mailto:sage [2007/09/12(水) 23:40:58 ]
- 明快に理解できました。
頭の靄がいっぺんに貫かれて光が差し込まれたような晴々しい気分になりました。 丁寧な説明ありがとうございます。
- 586 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 23:53:53 ]
- 寧ろ、inlineなんかは積極的に使わずにコンパイラの最適化に任せた方がいいと思うが。
- 587 名前:register mailto:sage [2007/09/12(水) 23:56:06 ]
- おいらのこともたまには思い出してくれないか?
- 588 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 00:25:43 ]
- >>587
そう言えばconstも、今はプログラマ側の変更不可、副作用不可という側面が際立って紹介されてるけど K&R読むとキャッシュへの最適化を促すregisterの様に、殆ど読み込みしかしないメモリに配置されて速度的に有利になる様な 最適化を、コンパイラへ促す効果があると記述されてたね。今のハードウェアの観点から考察すするとどうかは知らないけど。
- 589 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 16:50:41 ]
- 初期化された const T[] がROM化可能な領域に配置されるのは
昔のコンパイラには良くある振舞い。まぁ今でも似たようなものか。 プロセス間で場合共有可能なページという感じで。
- 590 名前:,588 mailto:sage [2007/09/13(木) 21:06:23 ]
- なんか趣旨が伝わりにくい文章ですが、要するにregisterもconstもに多様な位置づけだよね、ってことです。
- 591 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 22:26:55 ]
- >>590
いいえ。
- 592 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 23:33:35 ]
- それはトムです。
- 593 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 23:43:15 ]
- tomcat
- 594 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 00:01:10 ]
- わろた
- 595 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 00:03:35 ]
- べ、別にわろてなんかいません!勘違いしないでください!
- 596 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 11:29:42 ]
- トムも仏も無い
- 597 名前:デフォルトの名無しさん [2007/09/15(土) 19:56:06 ]
- ところで作りかけのソースあっぷしたら虐めてくれますか?
- 598 名前:デフォルトの名無しさん [2007/09/15(土) 21:39:52 ]
- うん
- 599 名前:デフォルトの名無しさん [2007/09/17(月) 03:19:16 ]
- あるテキストファイルを行の順番を逆にして出力したいんだけど、
スマートなやり方が思いつきません。 今は vector<string> str; テキストファイルから1行読み込み str.push_back(読み込んだ文字列); for(int i=str.size()-1;i>=0;i--) cout << str[i] <<endl; こうしてるんだけど、これだとファイルが数百MByte以上になったときにバッファを大量に食うので避けたい。 打開策として、インプットファイルを終端からReadするって手があるのですが、 これ以外でいい方法はありませんか?
- 600 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 03:29:23 ]
- ファイルを分割して読み込む
- 601 名前:599 [2007/09/17(月) 03:41:50 ]
- >>600
あーなるほど! それも一つの手ですね!
- 602 名前:599 [2007/09/17(月) 04:01:35 ]
- >>600
お礼を言い忘れました。 どうもありがとうございました。
- 603 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 05:15:30 ]
- あとはまぁ、行頭位置のインデックスを作るとか。
元ファイルを調べて、「改行の次の位置」をvector<ifstream::pos_type>型のコンテナにでも詰め込めば、 あとは好きな行を取り出せる。 同じテキストファイルを、毎度毎度ひっくり返して表示する仕様の場合、 そのインデックスを、a.txtに対してa.indexとか名前付けて保存しておけば、2度目以降は速いよね。
- 604 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 07:14:59 ]
- 数百MB単位のファイル読むときはちゃんとmemory mapped file使おうぜ。
このスレの範疇からは外れるが。
- 605 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 08:23:03 ]
- >>604
でもさ、>>599の場合だと、 結局は、一度は最初から最後まで全部読み込まないといけないことには変わりないし、 先頭から読んでいくのと違いあるのかな。 普通のモダンなOSはディスクアクセスから予測した先読みのキャッシュぐらいあるだろうし
- 606 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 09:16:07 ]
- つ[tail -r]
- 607 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 12:10:29 ]
- $ tail -r
tail: オプションが違います -- r 詳しくは `tail --help' を実行して下さい.
- 608 名前:デフォルトの名無しさん [2007/09/17(月) 13:31:44 ]
- つか、テキストファイルを逆順に表示する必要があるのか?
- 609 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 13:34:05 ]
- 実用的な場面はあまりないかもしれないけど、言語の勉強のための課題としては
手ごろな内容なんじゃないかな。
- 610 名前:デフォルトの名無しさん [2007/09/17(月) 13:35:00 ]
- tail -f /var/log/messages でいいでね?
- 611 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 14:05:18 ]
- 馬鹿はすっこんでろ
- 612 名前:デフォルトの名無しさん [2007/09/17(月) 14:18:17 ]
- 言語の勉強ならなぜにstd::vectorを使う?
- 613 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 14:26:42 ]
- C++の勉強ならSTLが適当だろう。C++スレだし
- 614 名前:デフォルトの名無しさん [2007/09/17(月) 14:32:09 ]
- 勉強が目的なんでしょ?
- 615 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 14:35:55 ]
- 「言語文法の勉強」って限定してないなら標準ライブラリの使用法も範疇だろ
- 616 名前:デフォルトの名無しさん [2007/09/17(月) 15:17:22 ]
- c++の質問じゃないかもしれないけど
0x00000F00 こってどういう意味なんでしょうか? 16進法かなと思うんですが
- 617 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 15:27:26 ]
- 明らかにC++じゃないしプログラムの質問でもないぞ
0x00000F00は10進数の3840だ。
- 618 名前:デフォルトの名無しさん mailto:age [2007/09/17(月) 15:29:33 ]
- .
- 619 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 15:31:05 ]
- >>616 数値のリテラルを16進数で書きたいときの書き方。
その数値自体の意味までは判らんよ。
- 620 名前:デフォルトの名無しさん [2007/09/17(月) 15:37:41 ]
- 3840ってことはF00ってことでおk?
- 621 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 15:39:47 ]
- >>620
何がOKかさっぱりわからん。3840(10)=F00(16)ってだけだ。 わからんならWindows標準の電卓でも使ってくれ。
- 622 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 15:44:17 ]
- >>617
一応C++の質問になるなじゃない? CやC++など一部の言語では16進数を表記する文法として0x〜を採用しているだけで、 一般的に16進数を0x〜と表記するという規則はないでしょ。
- 623 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 15:50:12 ]
- いやー、どこの言語でも0xか\xのプリフィックスが付いたら
16進数だと思うけど。
- 624 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 15:56:26 ]
- "0x"が仮にC++特有だとしてもそれ以降はただの16進数だしな
- 625 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 15:58:36 ]
- 数字の混ざったトークンにa - fが入ってたら接頭子がなんであれ16進と解釈できるだろ。
- 626 名前:599 mailto:sage [2007/09/17(月) 16:00:52 ]
- >>603-615
どうも、ありがとうございました。 勉強になります。 学校の課題とかではないです(私はもう学生ではないので…) 株と為替の時系列データを処理するプログラムを書いているのですが、 データの入手先によって、系列の時間が上り順のものと下り順のものの2種類あるので、 一方を並べ替えることで1つの書式にそろえようとしたわけです。
- 627 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 16:04:36 ]
- >>625
17進数〜36進数という可能性も。
- 628 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 16:13:47 ]
- 1バイト文字コードなら256進数までありうる
- 629 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 16:52:10 ]
- >>616
死ね
- 630 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 16:57:01 ]
- そこは気を利かせて
0xDEAD とか書かないと
- 631 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 17:01:14 ]
- >>630
0xDEAD=57005 実はお前さんの書き込み時間は、57分00.5秒だったのでは…
- 632 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 17:29:46 ]
- 0xDEADBEEF
- 633 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 19:23:11 ]
- 0xBADCAFFE
- 634 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 19:51:52 ]
- 0xBACA
- 635 名前:デフォルトの名無しさん mailto:C++でOOPらしいコードを書くにはどうすればいいだろうか [2007/09/18(火) 19:54:44 ]
- 0xCPLASPLASDEOOPRASIIKODEWOKAKUNIHADOUSUREBAIIDAROUKA
- 636 名前:デフォルトの名無しさん [2007/09/18(火) 20:19:58 ]
- どうせなら CPLUSPLUS ってかけよ
- 637 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 20:21:27 ]
- >>635
C++はマルチパラダイム言語だ。そんな意味のない目標は捨てて身軽になろう。 OOPなんて所詮たくさんある道具の内の一つに過ぎない。
- 638 名前:デフォルトの名無しさん [2007/09/18(火) 20:25:01 ]
- >>636
気づかなかったわ >>637 okそうするよ
- 639 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 22:36:41 ]
- そういやどっかのサイトにあったけど、「OOPは呼び出し元を再利用するための手法の一つ」
というのはかなり納得した。特にC++のはそうだよな。
- 640 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 22:40:04 ]
- 定義なんぞどうでもいい
- 641 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 22:43:20 ]
- 定義?定義じゃネーヨ
概念だろ
- 642 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 00:03:17 ]
- テンプレート関数にテンプレートクラスを渡したいのですが、可能でしょうか
具体的には std::list<int> a; std::list<double> b; func( a ); func( b ); のようにしたいです
- 643 名前:642 mailto:sage [2007/09/19(水) 00:12:49 ]
- 自己解決しました
- 644 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 00:17:08 ]
- template <typename T> void func(std::list<T> x)
{ }; こんな感じ?
- 645 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 00:17:59 ]
- そんなちょっと考えたら解決するようなことをいちいち・・・
- 646 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 00:30:38 ]
- 馬鹿だからなんだぜ?
- 647 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 12:05:47 ]
- KODE
- 648 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 12:15:12 ]
- 氷結しよっ!
- 649 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 12:43:44 ]
- >>639
それはOOPっていうか、古くは各種アプリのプラグイン(DLL)に始まる インタフェイス抽象とかコンポーネント化とかの特徴のような気が・・・
- 650 名前:デフォルトの名無しさん [2007/09/19(水) 20:34:13 ]
- >>649
それは呼び出される側の再利用でなくて?
- 651 名前:デフォルトの名無しさん [2007/09/19(水) 21:28:47 ]
- 今ポインタの宿題をしていて 数値を交換するというやつで実行前の値の表示とでたのですがどういういみですか?
- 652 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 21:48:45 ]
- その質問を訊く身にもなってください。
今流行りのアスペルガーですか?
- 653 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 21:48:59 ]
- 意味がわからんし、C言語スレへ池
- 654 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 21:49:31 ]
- 俺に免じて許してやってくれ。彼は5歳なんだ。
- 655 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 21:54:15 ]
- 俺アスペルガーだけどこんな奴と一緒にしないで欲しい
- 656 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 05:03:48 ]
- 「数値を交換するというやつで実行前の値の表示とでたのですがどういういみですか?」
とはどういういみですか?
- 657 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 05:09:02 ]
- 数値を交換するというやつで実行前の値の表示とでたのですがどういういみですか?
What abhorring is of of display of the value before it executes it by the guy of exchanging numerical values it? 憎悪が交換数値の奴でそれを実行する前の価値の表示のものであること、それ? (゚Д゚)?
- 658 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 06:20:59 ]
- >>651
お前があほという意味じゃ
- 659 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 07:09:57 ]
- ある仮想関数が、メンバ変数を書き換えないと想定されている場合、constを付けた方がいいんでしょうか?
例えばこんな感じ↓ class A { public: virtual int GetX() const = 0; }; class B : public A { public: virtual int GetX() const { return x_; } private: int x_; }; const A*型を使う場面があるのかが気になります。
- 660 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 07:20:55 ]
- >>659 そうですね。
- 661 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 07:31:21 ]
- >>659
つけられるconstは全てつけるべき。 非constである必要ができたら、非const版を追加するかconstを外すか熟考すべし。
- 662 名前:659 mailto:sage [2007/09/20(木) 07:36:33 ]
- ありがとうございます。
- 663 名前:kkptcnZciZ mailto:ekeskb@bokqzg.com [2007/09/20(木) 12:34:39 ]
- KOMUgI <a href="vunuddokfscm.com/">vunuddokfscm</a>, [url=pliwysnvpdex.com/]pliwysnvpdex[/url], [link=uquzjkpzhomt.com/]uquzjkpzhomt[/link], hukythasnspn.com/
- 664 名前:マターリ ◆AbENcvTP5o mailto:sage [2007/09/20(木) 14:27:35 ]
- いきなりですみませんがこのスレに協力してくれる人を探しています。
ttp://sports2.2ch.net/test/read.cgi/entrance2/1190215633/l50
- 665 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 14:57:12 ]
- >>664
マルチすんな。
- 666 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 15:16:10 ]
- >>650
ん? プラグインやインタフェイス抽象は主として呼び出す側の再利用に繋がると思うけど。 呼び出される方の利用の仕方がまちまちだと、 呼び出す側はいちいちそれに合わせなくてはならないわけだけど、 インタフェイスや呼び出し規約(API)という形に抽象化し共通化しておくことによって、 呼び出し側を変更せずに機能を追加してゆくことができる。 もちろん呼び出される側を再利用する仕組みでもあるんだけど、 呼び出される側の再利用だけのためであれば単にAPI公開で十分なわけで。
- 667 名前:デフォルトの名無しさん [2007/09/20(木) 16:37:16 ]
- template<class T> class A
{ public: void (A<T>::*func)(); }; template<class T> class B { public: static void (B<T>::*func)(); }; template<class T> void (B<T>::*B<T>::func)() = NULL; template<class T, class U> class C { public: void (U::*func)(); }; template<class T, class U> class D { public: static void (U::*func)(); }; template<class T, class U> void (D<T, U>::*U::func)() = NULL; クラスDのようにしたいんですけど、どなたかわかる方いませんか? Visual Studio2005 SP1
- 668 名前:デフォルトの名無しさん [2007/09/20(木) 16:38:31 ]
- ちなみにクラスD以外はビルドOKです
- 669 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 16:49:48 ]
- template<class T, class U> class D
{ public: static void (U::*func)(); }; template<class T, class U> void (U::*D<T, U>::func)() = NULL; こうだろ?
- 670 名前:デフォルトの名無しさん [2007/09/20(木) 17:19:20 ]
- うぉ、ビルドとおった〜
ありがとう!! 昨日からずっと考えてたよ。
- 671 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 18:48:48 ]
- 横からごめん
template<class T, class U> void (U::*D<T, U>::func)() = NULL; ってどういう意味?
- 672 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 19:04:46 ]
- >>671
単なる、staticなメンバー変数funcの定義だよ。 NULLで初期化してるだけ。
- 673 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 19:05:53 ]
- void (U::*)() 型のstaticメンバ変数 D<T, U>::func を定義して NULL で初期化している
- 674 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 20:44:48 ]
- 最近某入力デバイス共有ソフトのソースと某モデリングソフトのプラグインサンプルのソースと
見る機会があったんだけど そのどっちも、どう考えても継承ツリーの最底辺、絶対継承されっこないし実際されてない javaだったらfinalがついてもおかしくないクラスのメンバで 継承元の仮想関数をオーバーライドしている関数にvirtualがついてた 薄々感じてはいたんだけどどんな状況でもオーバーライドした関数にはその目印にvirtualをつけるっていう 暗黙のコーディングルール(というかおまじない?)のようなのが流行してるのかな? それともvirtual修飾子の意味をほとんどの人が誤解している?
- 675 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 20:51:49 ]
- かなり昔から流行ってるよね。
- 676 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 20:56:41 ]
- C#のvirtual, overrideキーワードを見るよろし
- 677 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 20:58:33 ]
- >>676
C# なんか存在しない頃から流行ってるよね。
- 678 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 21:24:07 ]
- 別にはやってないだろ
- 679 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 21:26:07 ]
- 文法的にはどっちでもいいんだっけ?
- 680 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 21:27:37 ]
- 多分継承元のクラスから関数宣言コピペして、面倒だからvirtual削除してないだけだろ。
- 681 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 21:40:33 ]
- virtualつけてもoverrideかどうかは分からない
ということに最近気づいた
- 682 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 21:41:32 ]
- overrideする側はvirtual要らないんだっけ
俺はいつもコメントにoverrideって書くけど C#がうらやましいぜ
|

|