1 名前:デフォルトの名無しさん [2009/01/11(日) 11:21:38 ] C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。 前スレ C++相談室 part65 pc11.2ch.net/test/read.cgi/tech/1230341243/
30 名前:テンプレート朝鮮中 [2009/02/11(水) 00:01:08 ] 質問です。 テンプレートクラスを継承しているクラスがあるとします。 継承先のクラスで継承元のメンバー関数の処理の動作を変えたい場合、 特殊化とオーバーライドの両方が使えそうな気がしています。 仮に両方が使用できる場合、メリットとデメリットはどのようなものがあるのでしょうか? template <typename T> class BASE { T t; public: virtual void func() {....} }; ---- オーバーライド ----- class A : public BASE<int> { public: virtual void func() { func2(); BASE::func(); } }; ---- 特殊化 ----- template <> class BASE <int> { public: void func() { func2(); BASE::func(); } };
31 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 01:45:57 ] 継承すれば、継承元をインターフェイスとして扱える。 特殊化するとテンプレートの意味がない気がする。
32 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 02:32:51 ] >>30 後者は無理だ。 BASE<int>で特殊化するということは、BASE<int>の実装を乗っ取るということ。 つまり、BASE::func();が自分自身を呼び出す再帰になる。 大本のBASE<int>を使いたいというのであれば、 その中では継承しか手段が残らないな。
33 名前:テンプレート朝鮮中 [2009/02/11(水) 03:28:30 ] 回答ありがとうございます。 先輩に、 テンプレートクラスにvirtualをつけるのは何故だ!! 静的ポリモフィズムと動的ポリモフィズムを理解していないんでない!! と言われ悩んでました。(実際にはまだ悩んでいますが・・・) 明日、静的ポリモフィズムと動的ポリモフィズムの違いが明記してある 参考書を貸していただけるとのことなので、再度、勉強します。 勉強しても、分からなければ、もう一度、質問させていただきます。
34 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 07:25:55 ] #define const #define private
35 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 08:47:44 ] CもしくはC++でWEB操作の解説してる本があれば教えてください WEBサイトのページから任意の文字列を取得したり そのページの任意の場所をクリックしたりラジヲボタンを選択したり これらをUWSCというツールで行っていました プログラミングに興味があり今UWSCで行っていることをCもしくはC++でやってみたいと思います 紀伊国屋という大きな本屋さんでC関係の解説書を漁ってみたのですが C言語でWEBページを開くということ自体解説されている本が見当たりませんでした 日本語表記でWEB操作を解説している本を教えてくださいm( _ _ )m .NETやperlやPHPなら簡単だぞって解答は不要です CまたはC++でやりたいです よろしくお願いします
36 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 08:53:46 ] 諦めろ。
37 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 10:07:02 ] そんなぁorz どなたか>>35 お願いします
38 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 12:50:38 ] >>37 標準C / C++には通信の概念自体がない、だからなんか外部のライブラリを利用することになる .NETがいやならなんか他の使えば?
39 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 12:52:39 ] >>35 ttp://www.google.co.jp/search?hl=ja&safe=off&q=C%E8%A8%80%E8%AA%9E+CGI&btnG=%E6%A4%9C%E7%B4%A2&lr= ttp://www.google.co.jp/search?hl=ja&safe=off&q=iconv&btnG=%E6%A4%9C%E7%B4%A2&lr=
40 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 12:54:23 ] webページを操作って、CGIってことじゃないのか。 webページを開くって、ブラウザ起動するってことか?
41 名前:デフォルトの名無しさん mailto:35 [2009/02/11(水) 14:00:30 ] 携帯からてす
42 名前:デフォルトの名無しさん mailto:35 [2009/02/11(水) 14:09:56 ] みなさんありがとうございます 出先からなので携帯からです 39さん 帰宅したら見てみます お忙しい中ありがとうございます 40さん CGIじゃないです ヤフーのアンケートに応募したり 株価のデータ取得して整理したりです 今はUWSCで満足できる操作できています C言語覚えたいので これらの操作をCで行うのが目標です ありがとうございました
43 名前:停止しました。。。 mailto:停止 [2009/02/11(水) 15:46:20 ] 真・スレッドストッパー。。。( ̄ー ̄)ニヤリッ
44 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 19:18:58 ] 関数のローカル変数はいつ初期化されるのでしょうか? これはOK? void push_back(std::vector<int>& v,int val) { static tbb::spin_mutex m; tbb::spin_mutex::scoped_lock locked(m); v.push_back(val); }
45 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 19:21:03 ] このスレの状況がよくわからんが、 とりあえず↓使おうぜ。 C++相談室 part65 pc11.2ch.net/test/read.cgi/tech/1230341243/
46 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 19:27:11 ] >>44 初めて関数に入った時。 ただし、初期化に副作用が発生しない場合は プログラム開始時に初期化される可能性もある (いつ初期化されようが動作に変化が無いので)。
47 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 19:44:49 ] STLつかうと一気に実行ファイルサイズが10倍に?! 環境によるだろ。 俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力 ランタイムを使用するようにして使っているが、例えばstd::vectorを 使っても使わない時と比べ10Kほどしか増えない すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。 C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。 とかいうエラーが出るんだけどこれってどうすればいいの? #include <stdafx.h> 後死ね。 言葉が悪いな。それで教えているつもりか。 まぁヒントぐらいにはなったな。 うむごくろう。
48 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 21:47:18 ] >>36 >>38 Boost.Asioとかソケットとかキーワードを挙げるくらいしてもいいじゃない。 まあウェブページのダウンロードくらいだったら、HTTP扱える高水準なライブラリを探すべきだと思うけど。
49 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 21:52:19 ] となるとcurlあたりか
50 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 00:48:32 ] C++ for Programmersは 糞本です買わないでください
51 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 16:42:10 ] >>44 一応言っておくと、初期化は>>46 の通りだが 現行C++ではスレッドの概念が無いので 同時にその関数に入った場合どうなるかは環境依存。
52 名前:誘導 mailto:誘導 [2009/02/12(木) 21:47:00 ] qb5.2ch.net/test/read.cgi/saku/1098189517/282 C++相談室 part66 pc11.2ch.net/test/read.cgi/tech/1234420483/
53 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 21:51:25 ] 後から立てといて意味分からね
54 名前:デフォルトの名無しさん [2009/02/12(木) 22:36:02 ] C++とC言語では構造体を作るときCのほうでしか必要でないものって何なんだ? あとC++の共用体の扱いとかわからんのだが
55 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 23:18:03 ] struct A { int hoge; }; struct A a; ~~~~~~
56 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 01:24:30 ] そういえば、C++では struct stat xx; ではなく stat xx; と宣言できるのだが、それをやってしまうと 同スコープでのstat()関数の呼び出しでエラーになるんじゃなかったかな。 個人的には、「Cの標準」に含まれる構造体はC++で使うときも struct をつけるようにしている。 いや、statがCの標準じゃないのは百も承知だが struct tm とかの場合ね。 で、同様に、struct stat のように「Cでも一般的に使える」ものもそうしてる。 POSIX準拠のものとか。
57 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 01:39:31 ] >>56 エラーになるから struct stat じゃないとダメ。 struct a; int a(); a x; 3: error: `a' does not name a type 3: error: extra `;' Process gcc exited with code 1
58 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 07:24:23 ] C++ の話だぞ?
59 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 07:24:52 ] って、ああ、stat の話か。 stat 関数があるからってことか。
60 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 08:55:07 ] boost::multi_arrayで、以下のようなソースがコンパイルが通らなくて困っています。 どこが間違っているのか教えてください。nの代わりに即値を使うとコンパイルできます。 array_type自体のtypedefはうまくいっているようです。 #include <boost/multi_array.hpp> template <unsigned int n> class Test { typedef boost::multi_array<int, n> array_type; typedef array_type::index array_index; // ここでエラー array_type array; public: Test(){} }; int main () { Test<3> m3; Test<4> m4; } ---- g++ -Wall -g -I /usr/include/boost-1_33_1 -o a.exe multiarray.cpp multiarray.cpp:7: error: type `boost::multi_array<int, n, std::allocator<int> >' is not derived from type `Test<n>' multiarray.cpp:7: error: ISO C++ forbids declaration of `index' with no type multiarray.cpp:7: error: expected `;' before "array_index" gcc version 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)
61 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 12:32:46 ] >>60 array_type::indexが型だということをコンパイラに教えてやる為にtypenameを付ける typedef typename array_type::index array_index;
62 名前:誘導 mailto:sage [2009/02/13(金) 18:51:30 ] qb5.2ch.net/test/read.cgi/saku/1098189517/282 C++相談室 part66 pc11.2ch.net/test/read.cgi/tech/1234420483/
63 名前:デフォルトの名無しさん [2009/02/13(金) 18:58:42 ] こっちが先だな
64 名前:44 mailto:sage [2009/02/13(金) 22:21:20 ] >>51 サンクス。 やっぱり無理でしたか・・・ 関数内で struct{static tbb::mutex m;}M; みたいに書ければいいなと思ったけどだめぽでした。 関数外に出すしかないか・・・
65 名前:誘導 mailto:sage [2009/02/13(金) 22:36:44 ] qb5.2ch.net/test/read.cgi/saku/1098189517/282 C++相談室 part66 pc11.2ch.net/test/read.cgi/tech/1234420483/
66 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 22:57:32 ] class HAGE { private: HAGE(); ~HAGE(); protected: HAGE(); ~HAGE(); public: HAGE(); ~HAGE(); };
67 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 23:02:56 ] コンパイルエラー
68 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 23:11:36 ] HAGE *leave21 = new HAGE(); HAGE *aderans = new HAGE();
69 名前:デフォルトの名無しさん [2009/02/13(金) 23:15:47 ] class ZURA : public HAGE { };
70 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 23:42:28 ] struct LEAVE21{ /* */ }; struct ADERANS{ /* */}; class HAGE{}; template <typename ZURA_TRAITS=LEAVE21> class ZURA : public HAGE{ /* */}; ZURA<> shokumou;
71 名前:60 mailto:sage [2009/02/14(土) 00:56:48 ] ありがとうございました!
72 名前:281 mailto:sagege [2009/02/14(土) 15:16:38 ] qb5.2ch.net/test/read.cgi/saku/1098189517/282 C++相談室 part66 pc11.2ch.net/test/read.cgi/tech/1234420483/
73 名前:停止しました。。。 [2009/02/14(土) 18:06:05 ] 真・スレッドリスターター。。。( ̄ー ̄)ニヤリッ qb5.2ch.net/test/read.cgi/saku/1098189517/282 C++相談室 part66 pc11.2ch.net/test/read.cgi/tech/1234420483/
74 名前:デフォルトの名無しさん [2009/02/14(土) 18:49:23 ] 1 名前:デフォルトの名無しさん[] 投稿日:2009/01/11(日) 11:21:38 ^^^^^^^
75 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 16:01:06 ] ☆, -──- 、 _____ [, -──- 、 _____] , -──- 、 _____ /_____ \� //⌒ヽ ⌒ヽ `\ |/⌒ヽ ⌒ヽヽ | ヽ / | ^ |^ |- 、 ヽ | / | ヽ |─| l // `ー ●ーU′ \ ヽ / ー ヘ ー ′ ´^V / ─ | ─ ヽ i l \ / _丿 i 二 | 二 | | . \ ` ー ´ / .l \ | / l ! >ー── く ヽ \ | / / / / |/\/ \ ヽ  ̄ ̄ ̄ / / 同じスレではこのままだけど l l | l >━━5━━━━━く 違うスレにコピペするとドラえもんがスネ夫 ヽ、| | ノ / く / ヽ に変わる不思議なコピペ。 |ー───j l (⌒(⌒) / |
76 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 16:35:07 ] wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
77 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 16:35:32 ] >>76 スレ違い。
78 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 16:37:51 ] >>77 どのスレにいけばいいでしょうか?
79 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 16:38:50 ] >>78 Grass【ちょっと草植えときますね型言語】 pc11.2ch.net/test/read.cgi/tech/1219466260/
80 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 04:53:18 ] せめて10分は間隔あけようぜ・・・
81 名前:停止しました。。。 mailto:sage [2009/02/16(月) 15:48:40 ] 真・スレッドリスターター。。。( ̄ー ̄)ニヤリッ qb5.2ch.net/test/read.cgi/saku/1098189517/282 C++相談室 part66 pc11.2ch.net/test/read.cgi/tech/1234420483/
82 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 22:23:36 ] え?
83 名前:デフォルトの名無しさん [2009/02/16(月) 22:31:59 ] 後発スレで自演厨が暴れてるな
84 名前:デフォルトの名無しさん [2009/02/17(火) 01:47:18 ] イテレータのコンセプトは素晴らしいと思います。 ところで<algorithm>ヘッダのテンプレートはほとんどistreamの入力イテレー タに適用できません。 イテレータにバッファを内蔵し前進イテレータに変換すると適用できると思う のですが、こういったものはすでに作られていないのでしょうか? また、アイデアそのものに問題点はありますか? よろしくお願いします。
85 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 02:02:04 ] >>84 std::istream_iterator std::istreambuf_iterator
86 名前:デフォルトの名無しさん [2009/02/17(火) 02:07:09 ] >>85 両方ともinput_iterator_tagが指定されています。 forward_iterator_tagを想定するとお考えください。
87 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 02:38:59 ] >>84 Boost.Spiritがfile_iteratorというランダムアクセスできるイテレータを持っている。 内部でどんな実装をしているかは知らないが。 あと、イテレータではないけど、pstadeのovenというライブラリのmemorizedが 汎用的なバッファ機構(メモ化)を備えていて、 たとえ、元のカテゴリが入力だったとしてもこれを通せば前進になる。 p-stade.sourceforge.net/oven/doc/html/oven/range_adaptors.html#oven.range_adaptors.memoized 問題点はよく知らない。 ただ、memorizedは汎用なので、vectorやdequeに貯め込んだり、 file_iteratorのようにストリームに特化して作ったほうが、より効率が良いとは思う。
88 名前:デフォルトの名無しさん [2009/02/17(火) 02:44:54 ] >>87 boostのはたしか、ファイルをすべてメモリー上に読み込むような感じの ものだったと思います。 若干意味合いが異なります。 ovenはちょっと見てみます。
89 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 03:34:25 ] >>84 要素へのアクセスで、初めて読む部分かすでに読んだ部分かで処理を分けることになるので、 vector などのコンテナに必要な分を読み込んでから処理するのに比べて効率が悪くなりそう。 そのうえで、実際には必要な分を読み込んでから処理すれば十分なことがほとんどになるので あんまり需要が無いんだと思う。 本当に必要だといえる状況だと言うことなら、興味があるのでどんな場面か教えて欲しい。
90 名前:デフォルトの名無しさん [2009/02/17(火) 03:44:01 ] >>89 入力がある場合すべてにおいて必要になるのではないかと思っています。
91 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 03:55:28 ] >>90 それはないだろ。たとえばテキストファイルを1行ずつ読み込んで処理する場合、 getline() あたりで1行読んでの処理をループすればいい。
92 名前:デフォルトの名無しさん [2009/02/17(火) 04:04:38 ] >>91 入力を解析する必要がある場合すべて。 <algorithm>ヘッダを使用するという前提で。
93 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 04:12:17 ] >>92 その説明だと、vectorとかに蓄えればいいのでは、という疑問が解消されない。 どういう利点があると考えるのか詳しく聞きたい。
94 名前:デフォルトの名無しさん [2009/02/17(火) 04:15:40 ] >>93 ストリームの存在意義についてですか? いろいろ使い道はあるはずだと思いますけど。
95 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 04:23:34 ] >>94 研究するのは勝手だけれど、具体例を出せないのに意義を語られても困る。
96 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 04:34:30 ] >>94 いろいろと言うならひとつ挙げるくらい簡単だろ。
97 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 04:37:31 ] >>94 ストリームの存在意義など聞いていない。 >84 で挙げてる入力イテレータから前進イテレータへの変換をすることが、 必要な分だけコンテナに読み込んでからコンテナのイテレータを使うことに対して、 どんな利点があるのか挙げろと言っている。
98 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 07:50:35 ] >>84 せっかくだからGoFのデザインパターンを全て調べてみろ
99 名前:デフォルトの名無しさん [2009/02/18(水) 02:33:36 ] >>97 亀レスで申し訳ありませんが、ストリームの存在意義そのものが答えになら ないでしょうか?
100 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 02:40:00 ] >>99 それしか言えないなら聞き方を変えるけど、一旦コンテナに貯め込む方式の欠点は何?
101 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 02:56:05 ] >>99 そう思うんならお前の脳内にある「ストリームの存在意義」を挙げればいいだろ。 それを聞く前に答えになるかならないかなんて、エスパーでもなけりゃわからん。
102 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 03:00:44 ] 一般的なストリームの存在意義といえば、一度にメモリ上に読み込まずにちょっとずつ 処理することで少ないメモリで大量のデータを処理できると言う点があるだろう。 しかし >84 で挙げている方法は「バッファを内臓」することでこの点は失われているように見える。
103 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 03:31:07 ] いろいろ適当。 input_iterator it0; input_wrapper_forward_iterator it1(it0); input_wrapper_forward_iterator it2; // ? find_if(it1,it2,cnd()); it2はどう定義するの?
104 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 03:33:56 ] find_ifはinputでいけるねごめん。
105 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 03:46:48 ] こうか stream st; input_iterator it00(st.begin()),it01(st.end()); input_wrapper_forward_iterator it10(it00),it11(it01); algorithm(it10,it11); stream st; input_iterator it00(st.begin()),it01(st.end()); vector v(it00,it01); algorithm(v.begin(),v.end()); このレベルじゃ意味はまったくないな。
106 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 08:45:38 ] 変態だな
107 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 14:26:32 ] ゆとり
108 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 16:17:15 ] C++を使うなら妥協って物も覚えたほうがいいよ
109 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 17:04:12 ] 妥協は物じゃないよ
110 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 17:16:54 ] 名詞だから物だよ
111 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 17:30:59 ] じゃあ、名詞としての”妥協”を覚えればいいんだな
112 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 19:15:24 ] 屁理屈こねないの。
113 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 21:43:29 ] 形式名詞はひらがなで書けということですね。
114 名前:デフォルトの名無しさん [2009/02/18(水) 22:50:24 ] ::func() って記述を見かけたのですが、::の前って省略できるんですか?
115 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 23:00:43 ] >>114 #include <iostream> void func() { std::cout << "This is ::func()" << std::endl; } namespace AAA { void func() { std::cout << "This is AAA::func()" << std::endl; } void aaa() { func(); // AAA名前空間のfunc()が呼ばれる ::func(); // グローバル名前空間のfunc()が呼ばれる } }
116 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 23:23:21 ] >>115 さん ありがとうございます。 名前空間を念頭に置いてコードを読み直してみます。
117 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 01:46:02 ] >>116 読むのはいいけど真似するなよ
118 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 01:09:13 ] wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
119 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 01:12:34 ] すみません。 どなたかMPEG Audioのdist10というプログラム使ったことある方いらっしゃいませんか?
120 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 01:18:25 ] >>116 ヒント:スコープの概念。 static const int32_t var = 1; グローバルスコープ namespace foo { static const int32_t var = 2; } fooスコープ class hoge { public: static const int32_t var = 3; } hogeスコープ ::varは1 foo::varは2 hoge::varは3
121 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 11:10:00 ] wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
122 名前:デフォルトの名無しさん [2009/03/13(金) 20:52:41 ] throw new std::runtime_error("saji");
123 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 00:30:03 ] >>122 newされたstd::runtime_error * だと!そんなもんthrowされたらまさにサジを投げるしかないな。
124 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 07:13:32 ] >>122 newはもちろんジョークだよな?
125 名前:デフォルトの名無しさん [2009/03/18(水) 18:38:05 ] C++相談室 part67 C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。 前スレ C++相談室 part66 pc11.2ch.net/test/read.cgi/tech/1234420483/
126 名前:デフォルトの名無しさん mailto:sage [2009/03/19(木) 17:24:05 ] wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
127 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 09:58:48 ] std::sort で std::vector の要素をソートしようとしています。std::sort の第三引数にでたらめな比較結果を返す 比較関数を与えるとvector の要素の一部がおかしな値に置き換わってしまい、場合によってはプログラムが 異常終了してしまう現象に悩まされています。問題を再現するプログラムを用意しました。 #include <iostream> #include <vector> #include <algorithm> #include <cassert> int a[10] = {0, 0, 0, 1, 1, 1, 1, 0, 1, 1}, pos = 0; class ComparisonFunc { public: bool operator()(int i, int j) { return a[pos++] == 1; } }; void main() { int t[] = {3, 5, 1, 4, 2}; std::vector<int> v(t, t+5); std::sort(v.begin(), v.end(), ComparisonFunc()); assert(pos == 10); for (std::vector<int>::iterator it = v.begin(); it != v.end(); ++it) std::cout << *it << std::endl; } このプログラムを実行すると第3要素の値がおかしくなります。VC++ 2008 Express Edition と g++ 4.3.0 (MinGW) では一応実行が終了しますがIntel C コンパイラ 9.0 だと異常終了します。 環境は Windows XP SP3 (32ビット) です。「でたらめな比較結果を返す比較関数」を考えているのは、 ユーザが比較関数をスクリプト言語で定義できるシステムを作っているからです。operator() メソッドの 中でスクリプト言語で定義された比較関数を呼んで、その戻り値を operator() の戻り値として返す仕組みです。 そのためどんな比較関数が来てもプログラムが異常終了しないようにしたいと思います。どんな対策が 考えられるでしょうか? std::sort が比較関数の異常を検知して適当なところで処理を中断して例外でも スローしてくれたらと思うのですがそこまで面倒は見てくれないようです。
128 名前:デフォルトの名無しさん mailto:sage [2009/03/20(金) 10:47:27 ] >>127 std::sortに渡すコンパレータは辻褄のあった結果を返さないといけないと仕様で決められている。 そうでない場合の動作は未定義。 つまり、でたらめな結果を返す可能性のあるコンパレータはstd::sortには使えない。 ソート関数を自作するか、コンパレータを検証する関数を追加するしかないだろうね。 いずれにしても矛盾を検知しようと思ったら、O(n log n)では済まないと思う。
129 名前:デフォルトの名無しさん [2009/03/20(金) 16:49:42 ] c++で作られたプログラムを逆アセンブルしてるんですが、アセンブリ言語について質問できるスレってありませんか?
130 名前:デフォルトの名無しさん [2009/03/20(金) 17:16:32 ] このへんじゃね? pc11.2ch.net/test/read.cgi/tech/1172916032/