1 名前:デフォルトの名無しさん [2009/07/19(日) 22:32:32 ] スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。 過去ログ スレを勃てるまでもないC/C++の質問はここで pc11.2ch.net/test/read.cgi/tech/1167476845/ スレを勃てるまでもないC/C++の質問はここで 2 pc11.2ch.net/test/read.cgi/tech/1178503366/ スレを勃てるまでもないC/C++の質問はここで 3 pc11.2ch.net/test/read.cgi/tech/1187521676/ スレを勃てるまでもないC/C++の質問はここで 4 pc11.2ch.net/test/read.cgi/tech/1221633708/ スレを勃てるまでもないC/C++の質問はここで 5 pc11.2ch.net/test/read.cgi/tech/1230516307/ スレを勃てるまでもないC/C++の質問はここで 6 pc11.2ch.net/test/read.cgi/tech/1231564903/ スレを勃てるまでもないC/C++の質問はここで 7 pc11.2ch.net/test/read.cgi/tech/1232983248/ スレを勃てるまでもないC/C++の質問はここで 8 pc12.2ch.net/test/read.cgi/tech/1235921779/ スレを勃てるまでもないC/C++の質問はここで 9 pc12.2ch.net/test/read.cgi/tech/1240022781/ スレを勃てるまでもないC/C++の質問はここで 10 pc12.2ch.net/test/read.cgi/tech/1242300936/ スレを勃てるまでもないC/C++の質問はここで 11 pc12.2ch.net/test/read.cgi/tech/1245059383/
63 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 06:43:58 ] >>61 トン >>62 前見たときこれは無理と思ったけどそろそろ読めるかも
64 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 07:03:04 ] >>63 要するにthisをconst_castな Effective C++の初版の21項 「使える時は、必ずconstを使おう」を読むと良い
65 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 12:55:48 ] Effective C++は邦訳の改訂第2版しか持ってないんですが 初版の古本とか見たら買ったほうがいいですか
66 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 15:05:34 ] >>65 改訂2版でいいよ 俺が言ったのは第3版との区別を付けるため
67 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 15:18:33 ] こんな感じかえらい汚いなあ template <class T> class Test { T i; public: Test(T t) : i(t) {} T* func() { return &i; } const T* func() const { return const_cast<const T* const>(const_cast<Test<T>* const>(this)->func()); } }; int main() { Test<double> t(123); const Test<int> t2(456); std::cout << *t.func() << std::endl; std::cout << *t2.func() << std::endl; }
68 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 15:58:53 ] 釣りか素か知らんが黙っとれ
69 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 16:01:38 ] >>68 お馬鹿?
70 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 17:09:54 ] 釣り・・・だよなw
71 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 17:32:59 ] iterator it; (*it).guhehe(); ↑ なんで皆これを it->guhehe(); にしないの?
72 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 17:34:31 ] 皆ってどの範囲の皆?
73 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 17:51:33 ] >>71 エスパー回答すると、以前のSTLのイテレータは後者の 書き方ができなかった
74 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 17:56:49 ] ファクトリメソッドに関してなんですけど、独習デザインパターンという本に class FooFactoryBase { public: virtual Foo* create() = 0; }; class HogeTypeFooFactory { public: virtual Foo* create() {return new HogeTypeFoo();} }; int main(void) { FooFactoryBase* factory(new HogeTypeFooFactory()); Foo* foo(factory->create()); foo->vfunc(); delete foo; delete factory; } とするとクライアントのほうの変更も少なくて便利だよ、みたいな事が書いてあったんですが なぜこんなまどろっこしいことをするんでしょうか?関数ポインタを使って typedef Foo* (*createFoo)(); HogeTypeFooFactory { public: static Foo* create() {new HogeTypeFoo();} } int main(void) { createFoo create(HogeTypeFooFactory::create); Foo* foo(factory->create()); foo->vfunc(); delete foo; } と、書いたほうがnew/deleteも少ないし、コードも短いし、仮想テーブルの分メモリも少なくてすむし 再コンパイルするのは新規のファクトリとそれを使うクライアントだけだし、いろいろと優れてるように思えます 継承を使って新しいファクトリを作る利点ってほかに何かあるんでしょうか?
75 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 18:19:31 ] 答えは簡単、Javaには関数ポインタがないからさ
76 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 18:28:43 ] んー、どっちでもいいような気もするねぇ。 ところで、関数ポインタ版の Foo* foo(factory->create());は Foo* foo(create());じゃないの?
77 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 14:22:04 ] >>66 回答ありがとうございます。ちょっと安心しました。 Efecctive C++第3版も買いたいと思ってますけど、 Amazonレビューみるかぎり翻訳がよくないらしいですね…
78 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 14:44:16 ] そお?悪くはなかったよ。 改定第2版を訳してる吉川邦夫先生に比べると落ちるというだけで。 少なくともMore Effective C++よりは数段いいし、 Effective STLと比べても良く出来てる。
79 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 15:14:25 ] >>77 翻訳はそこまで悪くない。 Amazonのレビューは鵜呑みにしないほうが良いと思う。
80 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 11:36:01 ] #include <iostream> namespace name1 { void func() {std::cout << __FUNCTION__ << std::endl;} }; namespace name2 { void func() {std::cout << __FUNCTION__ << std::endl;} }; int main(void) { using name1::func; func(); func(); func(); using name2::func; func(); func(); return 0; } こんな感じでusingを使いたいんですが、名前が競合していけませんよといわれました 前回のusingをキャンセルする、上書きする方法はありませんか?
81 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 12:02:02 ] >>80 int main(void) { { using name1::func; func(); func(); func(); } { using name2::func; func(); func(); } return 0; } これじゃ駄目なの?
82 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 12:09:49 ] その手がありましたか! 関数ポインタ使うところまでは考えたんですがこれのほうがわかりやすくていいですね
83 名前:デフォルトの名無しさん [2009/07/25(土) 17:42:12 ] class Point{ double m_x,m_y; Point():m_x(0.0),m_y(0.0){}; }; Triangle{ Point m_p[3]; Triange():((m_p(){Point()}); }; 上のような感じで、Triangleのコンストラクタでm_p[]の初期化を行いたいのですが、 やり方がよくわかりません。m_p[]をうまく初期化する方法はないでしょうか
84 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 17:53:36 ] C++にて double型の変数xが 確実に正の数(0でないことも負でないこともわかっている)であるとき、 それを10進表示した整数部分の桁数を求める 最も良い(簡単&速い&標準C++準拠)な方法は何でしょうか?
85 名前:84 mailto:sage [2009/07/25(土) 17:55:48 ] 追記 文字列表示させる方法もありで。
86 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 18:09:17 ] 10以下になるまで10で割って割った回数を計ったりするのが一般的 データの分布がdoubleの表現範囲で一様なら二分探索のほうが早いかな
87 名前:84 mailto:sage [2009/07/25(土) 18:18:42 ] >>86 俺はいつも(って程でもないが) std::log10でやったりしているんだけど そっちの方が速いのかね?
88 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 18:22:25 ] %sで文字列にして.までの数を数える。
89 名前:84 mailto:sage [2009/07/25(土) 18:24:11 ] >>86 ありがとうございます。 それが一般的なのですね。 >>87 参考にさせていただきますが、 なりすましはご遠慮ください。 >>88 それもありですね。 ありがとうございます。
90 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 18:28:38 ] >>86 それって一般的なのかね。
91 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 20:22:11 ] >>86 は無いだろう そんなコード書いてきたら突っ返す
92 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 21:01:41 ] >>84 浮動小数点の指数部を取り出して0.3を掛ける。
93 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 21:27:25 ] >>92 標準C++準拠だとして、それで行けるの?
94 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 22:13:22 ] 1000までの数で5a+7b+11c+13d+17e(aからeは0以上の整数)で表せる 全ての数のリストを求めるにはどうすれば良いですか
95 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 22:25:04 ] LinuxでC++のプログラム開発するときって、 今は、どうするのが普通? Eclipseとか使うものなのか? 俺が、大昔にやったときは、Emacs上で全てをシコシコ してたが、時代は変わってない?
96 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 22:26:20 ] >>94 深さ優先探索の考え方でできるよ
97 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 22:26:21 ] >>83 現在は残念ながら一般的には無理。 ただし、デフォルト初期化で良ければ、Triange(): m_p() {}とは書ける。 >>93 std::frexpが使えると思う。
98 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 22:32:18 ] >>94 表せない数が1 2 3 4 6 8 9だけじゃねーかw
99 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 22:42:21 ] まじっすか 実際は問題がもっと複雑で、5,7,11,13,17が 数千個の合成数になります ただ、考え方は一緒かと思って簡略化してしまったもので とりあえず深さ優先探索で頑張ってみます
100 名前:83 mailto:sage [2009/07/25(土) 23:01:22 ] >>97 int型の配列を初期化しているサンプルを見つけたので 似たようにして初期化できないか苦しんでました。デフォルト値では初期化できるんですね とりあえず諦めます。ありがとうございました。
101 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 23:02:16 ] 数千個・・・って逆に表せない数字減るんじゃねーか? 一回表せた数字の整数倍は全部表せるから 幅優先でやって倍数をチェックしたほうが早くなると思う
102 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 23:02:29 ] >>100 現行のC++では無理。 ごまかしで良ければboostで出来たと思う。
103 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 23:20:07 ] #include <iostream> class hoge { private:     struct fuga {         fuga(int num[3], int v1, int v2, int v3) {num[0] = v1; num[1] = v2; num[2] = v3;}     };     fuga m_fuga;     int m_num[3]; public:     hoge(int v1, int v2, int v3) : m_fuga(m_num, v1, v2, v3) {         std::cout << v1 << std::endl;         std::cout << v2 << std::endl;         std::cout << v3 << std::endl;         }; }; int main(void) {         hoge h(1, 2, 3);         return 0; } なんか使うのが不安なコードだ・・・ コンストラクタ1回分無駄にするのを承知で素直に{}のなかで代入したほうがいいってことかな つーか配列の数わかってて数も少ないならint num1, num2, num3;とかで十分だよね
104 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 23:45:48 ] struct fuga { fuga(int num[3], int v1, int v2, int v3) {num[0] = v1; num[1] = v2; num[2] = v3;} }; の num[3] はどこから拾ってきたのかしら
105 名前:94 mailto:sage [2009/07/25(土) 23:59:15 ] やっと出来た 現時点でlimit=10000で50秒ぐらいかかるのでこれじゃ解けなさそう(しかもlimit周辺の値は若干不正確) 幅優先探索って、エラトステネスの篩みたいなやり方? void solve(VI& v,set<int>& r,int limit){ VI tmp; int m=*max_element(r.begin(),r.end()); int n=*min_element(v.begin(),v.end()); copy(r.begin(),r.end(),back_inserter(tmp)); for(int i=0;i<v.size();++i){ transform(tmp.begin(),tmp.end(),inserter(r,r.begin()),bind1st(plus<int>(),v[i])); } if(n+m<limit){solve(v,r,limit);} } //vは{5,7,11,13,17} //rに結果が入る solve(v,r,1000);
106 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 00:03:31 ] 追記:rの初期値も{5,7,11,13,17}
107 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 06:41:59 ] >>95 プロジェクトによるけど、viとmakeでやってるところも普通にあるよ。 開発にEclipse使うばあいでも、Eclipseインストールしてなくても ビルドできるようにしておくことが多い。
108 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 12:28:08 ] >>94 なんか題意を正しく把握できてるか不安だが、こんなんでどうよ? #include <stdio.h> #define N 1000 char list[N+1]; int num[5] = {5,7,11,13,17}; void f(int n, int pos) { int i; list[n] = 1; for(i=pos; i<5; i++) { int temp = n + num[i]; if(list[temp]) continue; if(temp > N) return; f(temp, i); }} int main(void) { int i; f(0,0); for(i=0; i<=N; i++) if(list[i]) printf("%d ", i); return 0; }
109 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 12:46:35 ] >>108 >>99 数千個らしいよ
110 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 19:34:33 ] なんでもかんでもクラス化するのって逆に害ですよね? ビットフラグとかむき出しのほうがいいと思うんですけど
111 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 19:55:16 ] >>110 確かに > なんでもかんでもクラス化 は害になることもあるよ。 でも「なんでもかんでもクラス化すべきでない」っていう人の 大概は、「適切な対象でもクラス化できる技量がない」人だったりするんだよね。
112 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 20:11:44 ] >>110 何でもかんでもクラス化するべきですよ。ビットフラグなんか特に。
113 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 21:36:50 ] 1次元で確保された配列を二次元とみなして使うとして このとき配列Aの(x1, y1)から(x2, y2)のデータを配列Bの(X, X)から(X+(x2-x1), Y+(y2-y1))にコピーしたい時は ループまわしてひとつひとつコピーするしかないでしょうか
114 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 21:51:27 ] >>113 基本的にはそう。 環境によってはSIMD使って16byteまとめて転送 の様な高速化はできるけど。
115 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 13:25:52 ] >>113 せめてX方向1ライン分くらいmemcpyしたら?
116 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 13:43:11 ] >>113 x方向にデータが連続していると言う条件はつくけど、std::copyでも使えばいいんでない。 # cなら>115で。
117 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 13:50:18 ] そうですね組み込み以外でもつかうんでstd::copyします >>115 ,>>116 どうもでした
118 名前:デフォルトの名無しさん [2009/07/27(月) 19:18:23 ] C++ コンソールで、カーソルの位置を一行上に挙げたいのだが。 エスケープシーケンスは使えん。 使えるように設定できるのは知ってるが、別の方法で頼んだ。
119 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 19:21:34 ] で、その結果は?
120 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 20:32:20 ] shared_ptrって (*p).hoge() と p->hoge();ってどっちがいいの?
121 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 21:01:46 ] p->hoge();
122 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 21:46:51 ] >>120 何のためにアロー演算子があると思っているのだ。 p->hoge() が望ましい。
123 名前:助けて [2009/07/27(月) 22:16:07 ] 10進数から2進数に変える時、2進数を補数表現で表すプログラムを教えて下さい。 ドシロウトなんで、お願いします。
124 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 22:19:51 ] >2進数を補数表現で表す ???????????????
125 名前:デフォルトの名無しさん [2009/07/27(月) 22:39:30 ] >123 十進数 -10 を変換したとして -1010 ではなく 1111111111110110 と表示したいのか?
126 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 22:49:21 ] 補数って、1の補数とか2の補数ってやつだよな。 もう忘れた。
127 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 22:53:44 ] >>123 signed intなりsigned longに代入したあとに1ビットずつビット演算で取り出す
128 名前:助けて [2009/07/27(月) 22:54:36 ] >125 はい。その通りです。
129 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 23:05:28 ] class hoge { private: int *p; public: hoge(int x) : p(new int[x]) {} ~hoge() {delete [] p;} void fuga() {・・・} }; int main(void) { try { std::cin >> x; hoge h(x); } catch(std::bad_alloc& e) { std::cout << e.what() << std::endl; } h.fuga(); return 0; } ↑スコープが外れちゃうからh.fuga()でコンパイルエラーになってしまう 自動変数に対してtry-catchする場合はtryスコープを伸ばすしかない? 保守性を考えて自動変数からスマートポインタに変えるのがいいのかな?
130 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 23:18:10 ] >>128 #include <bitset> #include <iostream> using namespace std; int main() { const unsigned long value = 10; bitset< 16 > b( value - 1 ), result; result = ~b; cout << result.to_string() << endl; }
131 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 23:23:38 ] >>129 君が try しているのは hoge オブジェクトじゃないのか? それなのに、どうして try の外でそのオブジェクトを使おうとするのだ…。
132 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 23:41:46 ] tryしたいのは生成だけなのに延々としたまでスコープを伸ばしたくないんです tryスコープの中って処理重くなりそうだし、できるだけ短くしたほうがよかないですかね?
133 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 23:44:25 ] catchは下のほうにまとまってたほうがよかないか?
134 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 23:46:42 ] tryの中だから遅くなるなんてことはない。 実装にもよるが、tryに入るとき、抜けるとき、throwするとき、(catchして)catch節を抜けるときなど 基本的に要所要所でしかコストはかからないとみていい。
135 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 23:47:17 ] >>132 わかるわかる。 自転車がパンクしてるかどうかをチェックしたいし、その結果は大事だけど、その後はもちろん自転車に乗るってことだよね
136 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 23:51:54 ] あ、あんまし遅くならないんですね ずっと中の人が監視してなにか操作するたびチェックしてるのかと思ってた・・・ とすると void func() {     try{         // 全処理     }     catch(ex1 &e) {         // 〜     } }     catch(...) {         // 〜     } } みたいにやるほうがいいのか どうもどうも。すっきりしました
137 名前:助けて [2009/07/28(火) 00:01:45 ] >130 ありがとです
138 名前:デフォルトの名無しさん [2009/07/28(火) 09:48:09 ] なんでC++の標準ライブラリのヘッダって、.h って統一的なファイル名の つけ方をやめちゃったの? 拡張子ついてないから、扱いつらくない?
139 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 10:27:12 ] >>138 多分苦肉の策だと思う
140 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 11:01:49 ] >>138 標準化委員会に言ってくれ。 まあ一応 統一的に(一様に).h付いてないから 俺は許せるけど。
141 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 11:17:45 ] >>138 それがファイルでなくても構わないから。
142 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 11:23:14 ] タイプ量が減ってありがたいじゃないか。
143 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 11:35:21 ] >>141 その点は、Cの.hも同じですがね。
144 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 14:02:41 ] .hppが一番クール
145 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 14:20:10 ] >>138 Effective C++の49項を見る限りは、.hと差別化する最も単純な方法として 拡張子を無くす案が採られたみたいだね。
146 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 15:03:46 ] hxxじゃだめだったんかな
147 名前:デフォルトの名無しさん [2009/07/28(火) 15:08:47 ] 画面に指定した座標の点をプロットしたいのですが、 そういったことが出来る簡単なC++ライブラリはありますか?
148 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 15:11:05 ] DXライブラリを使いましょう
149 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 15:11:10 ] Win32API
150 名前:デフォルトの名無しさん [2009/07/28(火) 15:13:10 ] ありがとうございます。 DirectXスレかAPIスレに逝ってきます
151 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 15:39:11 ] >147がLinux使いだったら大笑いだな。まさしく、井蛙の愚だ。
152 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 15:44:43 ] >>151 敢えて触れない方がいいと思ったけど、とっても気になったので理由を聞かせてもらおうか
153 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 16:05:34 ] >>151 何で?
154 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 16:18:05 ] DXライブラリもWinAPIもWindows用だからだろ。JK
155 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 16:22:26 ] MACかもしれないといってみるテイスト
156 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 17:14:57 ] それがなんで井蛙の愚につながるの? 誰も井の中の蛙ではなくないか?
157 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 17:17:58 ] 自身の環境を書かない>147や、Windowsだと決めて掛かる>148-149をからかったんだろうけれど、 顧みすれば>151自身が井の中の蛙になっている罠。
158 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 17:22:37 ] 井(い)の中の蛙(かわず)大海(たいかい)を知らず 自分の狭い知識や考えにとらわれて、 他の広い世界のあることを知らないで 得々としているさまをいう。 井蛙(せいあ)。 まあ・・・なんかどうでも良くなってきた。
159 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 17:24:58 ] PC デバイスA デバイスBでシリアル通信する。 PCからはデバイスA,Bに対して交互に1S間隔で リードコマンドを発行している。 AまたはBがある状態になるとリードコマンドに対して 1バイトの'b'を返すようになる。 デバイスA、Bともには電源立ち上げ時バージョン情報等を PCに送るがその文字列の中に'b'が含まれている。 PC側はリードコマンドに対する応答の'b'だけを判断したい。 デバイスA,Bの電源立ち上げ時の情報は固定ではく、'b'が 含まれているとする。 このような内容だとどのようにコマンドに対する応答の'b' であると判断するのがよいでしょうか?
160 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 17:32:02 ] PCのリードコマンドを出す前にPCの受信バッファを空にしておくとか?
161 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 17:36:31 ] >>157 決めてかかったわけじゃないですよ 質問者が使う環境じゃなきゃ質問者は勝手に捨て置くでしょ
162 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 18:21:09 ] 掛け声みたいだな 「無礼者め手打ちにしてくれる、井蛙(せいあー)!!」
163 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 19:43:24 ] DXライブラリでゲームを作り始めたのですが、 メインループの書き方がおかしくないか不安です >< #include "GV.h" int WINAPI WinMain( HINSTANCE hI,HINSTANCE hP, LPSTR lpC,int nC ) { ChangeWindowMode(TRUE); if(DxLib_Init() == -1) return -1; Flame* T = new Flame; SetDrawScreen(DX_SCREEN_BACK); while(!(ProcessMessage()) && !(CheckHitKey(KEY_INPUT_ESCAPE)) && (T -> MainLoop()) && !(ScreenFlip()) && !(ClsDrawScreen())); DxLib_End(); return 0; } こんな感じなんですが・・・・
164 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 19:48:27 ] もしかして: Frame
165 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 19:50:52 ] うわぁ・・・・ 勢いだけで作成中なので英語力のなさが出た結果だとしか・・・ orz(それでもゲームを作りたいんです)
166 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 19:54:48 ] Yahoo!辞書 - flame ttp://dic.yahoo.co.jp/dsearch?enc=UTF-8&p=Flame&dtype=1&dname=1na&stype=0&pagenum=1&index=02737600 炎
167 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 20:03:24 ] 殻っていみのフレームのつもりがフレイムになってたなんて・・・ もしかしてこの質問ってスレチってやつでしょうか?
168 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 20:26:56 ] ゲームプログラムなら俺に聞け ってスレがあるよ
169 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 20:28:48 ] ゲ製の方を紹介してやれよ
170 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 20:46:04 ] ここより雰囲気のいいスレッドが見つけられないオ↓レ↑は、 専ブラで2chを覗く程度の初心者です。
171 名前:163 mailto:sage [2009/07/28(火) 21:31:24 ] とりあえず ttp://pc11.2ch.net/test/read.cgi/gamedev/1238429676/ こっち行ってみます。ふんいきこわいけど・・・ スレチすマソでしたー。
172 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 23:21:22 ] classの全部のメソッドで通常の例外チェック再スローと STLなどの外部ライブラリが出すかもしれない把握できない例外用のcatch(...){throw UnknownException();} をやってるんですが、やりすぎでしょうか? 例外ってドキュメントが少なくてどうやればいいのかなかなか方針が定まりません
173 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 23:51:33 ] >>172 どう考えるかによるんじゃね? 例えばSTLの投げる例外ならそのままthrow;で外に再送してあげた方が むしろ親切では?
174 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 00:33:01 ] カプセル化の事を考えて例外も隠蔽して 指定したもの以外出さないほうがいいかなぁと思ったんですが・・・
175 名前:173 mailto:sage [2009/07/29(水) 07:23:08 ] >>174 例外クラスは知ってるよね? 例えば C++編(標準ライブラリ) 第27章 例外クラス ttp://www.geocities.jp/ky_webid/cpp/library/027.html std::exceptionクラスを継承したものについては そのまま投げてあげた方が。。 まあ再送しなくても内部で処理できる問題だったらいいけど、 そうでなくて全部例外を飲み込んでUnknownException();にしちゃうのは どうだろう? だれか他の方も意見くださいな。
176 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 19:50:12 ] shared_ptr<> でnew deleteがほんとに1対1になってるか確かめたいんですけど グローバル変数を用意してコンストラクタで++、デストラクタで--とすればいいのかなと思うんですが これだと組み込み型のカウントをするのに困ります。どうすれば良いでしょうか?
177 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 21:00:36 ] >>176 グローバルなoperator newとoperator deleteを定義すればいいと思う。
178 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 21:08:40 ] >>176 何故?何のため?
179 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 22:07:31 ] コードを重複して書くのがいやなのでtemplateで書いた けど公開するのは、例えば<int>と<double>だけに限定したい こんなときはどうすればいい? class Hoge { private: template <typename T> class Fuga {}; public: typedef Fuga<int> _IntFuga; typedef Fuga<double> _DoubleFuga; }; typedef Hoge::_IntFuga IntFuga; typedef Hoge::_DoubleFuga DoubleFuga; これよりいい方法あったら頼む!
180 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 22:13:07 ] 明示的な実体化をした実装を別ファイルに移して、 クライアントコードから見えなくする
181 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 22:54:19 ] >>180 いまいちわからないんだけど、 hoge.h template < typename Type > class Hoge ; template <> class Hoge< int > ; template <> class Hoge< double > ; hoge.cpp #include "hoge.h" template <> class Hoge< int > {} ; template <> class Hoge< double > {} ; main.cpp #include "hoge.h" int main( void ) { Hoge< int > ihoge ; Hoge< double > dhoge ; /* 〜 */ ; return 0 ; } みたいな感じ・・・? これだと結局重複したコードを書いてるから意味無いような やりかたが間違ってるのかな?
182 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 22:58:33 ] ていうか↑コンパイルできないですね もうちょっと勉強してきます
183 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 23:01:13 ] template関連はごちゃごちゃしてるので記憶が曖昧だが許してくれ。 hoge.h template < typename Type > class Hoge; hoge.cpp template < typename Type > class Hoge { } ; template class Hoge < int > ; template class Hoge < double > ; main.cpp (同じにつき略)
184 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 02:13:34 ] class hoge{ private: class hoge_sub{ }; std::vector<hoge_sub> a(20); public: }; class内で固定長のclass型の配列を作りたいのですが VC++で error C2059: 構文エラー : '定数' というエラーを吐かれてしまいます このような場合どうすれば良いのでしょうか
185 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 02:22:50 ] >>184 コンストラクタ初期化子 class hoge{ private: class hoge_sub{ }; std::vector<hoge_sub> a; public: hoge() : a(20) {} };
186 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 02:23:01 ] vectorはそもそも配列じゃないですし 可変長なので固定長にもなりません。^^ vectorではなく、配列を使ってください。 hoge_sub a[20]; のようにするのです。
187 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 02:52:31 ] >>185 ,186 ありがとうございます class型の配列を扱いたいなと思った時に調べましたところ vectorを使う方法が紹介されてましたので、誤って認識していました
188 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 07:17:30 ] >>187 せめて入門書一冊分くらいは基礎を学んでおいた方がいいとおもうぞ。
189 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 22:45:01 ] >>188 入門書として適切なものを教えてください。 いや、手元には独習がありますが、ぜんぜん足りないような気がしているのです。
190 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 00:53:20 ] ハーバートシルト先生に教えてもらっておいてまだ足りないとな?
191 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 08:06:09 ] 独習C++なんて捨ててaccelerated C++とexceptional C++を読むんだ
192 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 10:16:59 ] 独習C++半分ぐらい読んで、EffectiveC++、More〜を全部読んで、独習デザインパターンも半分ぐらい読んで、ゲーム作る程度にはそれで十分だった
193 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 10:36:12 ] あまりの糞さに独習(ryは半分で飽きたということですね…わかります
194 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 11:42:47 ] マナたん(藁)→ロベールの次に読めるまともな本を教えて下さい
195 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 18:27:53 ] #include <iostream> class hoge { private: int x; private: class in_hoge { public: in_hoge() {std::cout << x << std::endl;} }; in_hoge ihoge; public: hoge() : x(100), ihoge() {} }; int main(void) { hoge h; // output: 100 return 0; } コンパイルできないんだけど、どうやれば実装できるかな?
196 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 18:36:36 ] >>195 in_hogeのコンストラクタにxを渡せばいいんじゃね?
197 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 18:51:33 ] in_hogeの配列を確保する予定なので、コンストラクタに引数を渡せないのです・・・
198 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 18:57:14 ] 配列使うかわりにvector使えばいいんじゃね?
199 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 21:48:17 ] stringのreserve()ってメモリをここでいっぺんに確保して後の操作で動的確保をなるべくしないようにってことでいいの? resize()との違いがようわからん
200 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 21:48:44 ] d.hatena.ne.jp/Isoparametric/20080117/1200575103 忍法ししちょびれ。
201 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 21:50:28 ] >>199 Yes, 高洲クリニック。 reserveは指定したサイズになるように「空き容量」を増やす。 resizeは指定したサイズになるように要素の数を増やすか減らす。 増えた要素は例えば0で埋められるし、減らされた要素は削除される。
202 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 18:41:23 ] VS C++ 2008 EE で コマンドラインから cl をつかってコンパイルする方法はないものですか? パスをとおし、バッチファイルvcvers32.bat を実行しただけはうまくいかないようです。
203 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 18:45:50 ] >>202 それだけでできると思うけど、スタートメニューの中に Visual Studio 2008 コマンドプロンプトとかいうのがあるはず。そっちが確実。
204 名前:202 mailto:sage [2009/08/02(日) 18:49:23 ] 自己解決です。 msdn.microsoft.com/ja-jp/library/ms235639.aspx に詳細がありました。でも専用のcmd を使わないとダメなようです。cygwin プロンプトから実行というわけにはいかないようです。
205 名前:202 mailto:sage [2009/08/02(日) 18:50:11 ] >> 203 ありがとうございます。
206 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 19:01:09 ] Javaスレ、 C++スレ迷いましたが、上のほうの板は荒れ気味なのでここで質問させてください。宜しくお願いします。 g++ (GCC) 4.2.4 です java からC++ で作ったプログラムを使いたいのですが、どのような手順で作成すれば良いのでしょうか、 参考になるHP とかがあれば教えてもらえませんか。
207 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 19:01:53 ] >>204 Cygwin上で使いたいのなら、自分で環境変数INCLUDEとLIBとPATHを設定すればいい。 C++/CLIを使うならLIBPATHも。 内容はVisual Studioコマンドプロンプトの丸写しでいい。 あるいは、Visual Studioコマンドプロンプト上でCygwin.batを呼んで起動するという手もある。
208 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 19:02:37 ] >>206 まずはJNIでググるんだ。 よく分からなかったら、どこがどう分からないかを書き添えてもう1度聞きに来るといい。
209 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 19:16:43 ] >>208 さん、早速の回答ありがとうございます やはりやり方といいますかjava で呼び出すことができるんですね、よく分かりました Windows でもLinux でもdll を作成してJava Native Interface 機能を用いて呼び出すことができるんですね、どうもありがとうございました。
210 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 23:29:35 ] 質問です。 C++でソケット使ったメール送信プログラム組んでます。 ループ内でコネクト・ライト・シャットダウン、クローズを 繰り返して複数メールの送信をしているのですが、 データ量が有る場合に送信されずにクローズしてしまいます。 送信バッファの指定・リンガ設定もしたのですが、変わりませんでした。 ソケット内での解決法やロジックでの解決法があれば 教えて下さい。。
211 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 23:32:05 ] ソースを晒さないとなんとも
212 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 00:54:59 ] >>210 パケットダンプ追えば、何がおきてるかわかるんじゃね?
213 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 01:47:48 ] 関数の終了コード(errnoとか)は見てる?
214 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 16:07:40 ] msdnのドキュメントなんだが、関数別に投げる可能性のある例外とか書いてあるページって無いものかな? 知りたかったらいちいちソース読まないといけないんだろうか・・・
215 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 16:18:48 ] ないよー ちなみに何の関数について知りたい?
216 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 16:36:11 ] >>215 今回知りたいのはtr1のmt19937とuniform_intですけど、ほかのも結構頻繁に気になります
217 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 18:19:23 ] 最近の SDK には boost が含まれてるのか?
218 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 20:18:14 ] 0xだろ
219 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 21:48:05 ] >>217 0xの先取りTR1 randomのほかshared_ptr, regex, unordered_map/setなんかのライブラリが入っている。 VC++では2008に拡張パックまたはSP1で導入できる。 msdn.microsoft.com/ja-jp/library/bb982198.aspx
220 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 21:52:33 ] VC++のSTLのソースってすごい見づらい
221 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 17:33:29 ] 関数オブジェクトとかよくいうけど関数ポインタでいいじゃんっておもう なにがすごいのこれ?
222 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 17:44:50 ] インライン展開できる
223 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:34:41 ] インスタンスが持てる
224 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 21:34:17 ] operator =ってコピコンみたいに継承元のコピー勝手に呼んでくれる、みたいな思いやりの精神は無いの?
225 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 21:47:11 ] コピコンにそんな機能あったのか
226 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 21:51:21 ] ないはず 勝手に呼ばれるのは継承元のデフォコンでは?
227 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 22:12:57 ] おまえら普通にコピコンとかデフォコンとかやめてください
228 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 22:13:45 ] Base::operator=を最初に呼ばないといかんのかめんどくさいな
229 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 22:15:28 ] じゃあシスコンで
230 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 22:18:21 ] デスコンとか超強そう
231 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 22:22:29 ] デスコン使うとか必死ですねwww
232 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 13:07:10 ] 例外って難しいです・・・
233 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 16:30:13 ] さじを投げてるだけじゃん。 誰かが拾って続きやるかもしれないけど、そいつもさじ投げるかもね。
234 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 22:01:09 ] Enterを押したら処理が進むようにするにはどのようにすれば良いのでしょうか? char dammy; cin >> dammy; cout >> "Hit"; のようにしてもEnterだけだと入力を受け付けられず、 なにか文字をいれてEnterをおさないと進みません。 よろしくおねがいします。
235 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 22:47:39 ] int dummy; dummy = cin.get(); cout << "Hit";
236 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 23:00:53 ] >>235 ありがとうございます。 ぶじかいけつできました。!!
237 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 01:24:15 ] 20個ものclassのインスタンスがあるのですが、 rand()%20 +1でせいせいした1~20までの数に合わせて それぞれのインスタンスにメソッドを適用したいです。 classのインスタンスを引数にわたしてメソッドを実行する関数を書いたので classの配列をつかってその関数にclassを渡したいです。Web検索で vectorを使うとかの説明は1つだけ出てきたのですが詳しくわからないのでよろしくおねがいします。 具体的にいうと class Hoge { public: Hoge() {} void fuga() {} }; void foo(Hoge h) { h.fuga(); } int main(void) { Hoge a; Hoge b; Hoge c; hit = rand()%3 + 1; class_array = なんらかのほうほうでa,b,cの配列 foo(class_array[hit]); return 0; } と言う風にかけないかと思っています。 よろしくおねがいします。
238 名前:デフォルトの名無しさん [2009/08/06(木) 01:29:08 ] Hoge a; Hoge b; Hoge c; hit = rand()%3 + 1; じゃなくて Hoge class_array[3]; hit = rand()%3; じゃだめ? まあfooは参照かアドレスで渡すべきというのは置いておいて。
239 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 01:31:37 ] >>238 すみません、大事な部分を忘れていました。 a,b,cのコンストラクタにはいくつかそれぞれ別の引数を渡したいのですが、 それもふまえた上でよろしくおねがいします。(上のコードのclass Hogeのコンストラクタは引数をとる物に変更してください)
240 名前:デフォルトの名無しさん [2009/08/06(木) 01:36:19 ] こら。 Hoge *class_array[3]; にして、それぞれ new すれば良いでしょ。 >それもふまえた上でよろしくおねがいします。 >(上のコードのclass Hogeのコンストラクタは引数をとる物に変更してください) どんだけ上目線なの。
241 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 01:38:35 ] >>240 なるほど、なんとなくわかってきました。 ありがとう御座います。 >どんだけ上目線なの。 すいませんでした、いま自分の望んでいる動作を日本語にするのが難しくて 変な日本語になっていました。すいません。
242 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 01:40:17 ] 実際はインスタンスが100個以上あるので、できればもう書いて生成してしまったインスタンスを けしてそれぞれnewし直す事なく修正したかったのですが、無理なようですね。 とりあえずがんばろうと思います。
243 名前:デフォルトの名無しさん [2009/08/06(木) 01:43:27 ] ポインタ知ってる?
244 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 01:49:11 ] どうやったらコンテナじゃないインスタンス100個とか糞みたいなコード書けるんだ
245 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 01:57:56 ] >>244 すいません、まだC++についてよくわかっていないのです.. おなじ種族に属する物で名前やジャンルが違うものを 100個の内50個はデフォルトでひつようで残りの50個は条件の違いによって 生成時に与えられるパラメータが違うという妙な仕様になっていて しかも100個どれが使用されるかはわからないという変なプログラムなんですよ。 まあ簡単にいうと動物園みたいなものです。
246 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 02:03:37 ] 配列にするのが嫌ならswitchでも使えばいいでしょ。 Hoge& selectHitTarget(Hoge& a, Hoge& b, Hoge& c) { switch(rand() % 3) { case 0: return a; case 1: return b; case 2: return c; } } int main(void) { Hoge a; Hoge b; Hoge c; Hoge& hit = selectHitTarget(a, b, c); foo(hit); return 0; }
247 名前:デフォルトの名無しさん [2009/08/06(木) 02:08:50 ] 246は何の解決にもなってないので却下として、 生成時に与えられるパラメータでインスタンスの生成方法が変わるものを 100個分書いた時点でなんかもう…。ま、書き直しを勧めます。 普通はパラメータは外部配列にしておくか、アルゴリズムで与えて、 オブジェクトが100個だろうが100000個だろうがループで回して配列に 入れながら new するでしょうね。 #スケーラビリティと言います。 この後はアドレス渡しではまって、継承ではまって仮想関数ではまって… となるのね。出題者は「わん」とか「にゃー」とか呼び分けたいだけなのに、 その手前で悩んでるパターンですかね。。。
248 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 02:25:46 ] static変数にパラメーターリストを入れて デフォルトコンストラクタでそれを参照しながら初期化するとか でもなんか気持ち悪いな・・・
249 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 02:30:53 ] オレだったらコンストラクタをテンプレート関数にして個々のメソッドの中にconstメンバを基にSTATIC_ASSERT吐く様にする
250 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 02:32:32 ] モンスターのパラメータ ランダムエンカウント時のモンスター決定 かと思った
251 名前:デフォルトの名無しさん [2009/08/06(木) 11:49:18 ] ttp://racanhack.sourceforge.jp/rhdoc/codepre.html このページのコードを実行したいのですがGlibはどうやって導入すればいいんでしょうか WindowsXPでVisual Studio 2008 Expressを使ってます
252 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 13:37:37 ] >>251 GTK+の本家サイトでWin32版がダウンロードできるみたいだよ www.gtk.org/download.html
253 名前:253 mailto:sage [2009/08/06(木) 21:02:01 ] CもしくはC++でウェブ上の画像をURLを指定してhttpでダウンロードしたいのですが できなくて困っています。 環境は下の通りです。 OS:windows XP 開発環境:Visual C++ 2008 ExpressEdition(win32プロジェクト) htmlファイルならwininetを使ってダウンロードできたのですが、 画像だとできません。htmlファイルと同様に画像もできないのでしょうか? また、wininet以外でいい方法があるなら教えてください。 サンプルプログラムは次に書きます。
254 名前:253 mailto:sage [2009/08/06(木) 21:06:00 ] HINTERNET hInet, hUrl; char szBuf[128], *lpszSrc; DWORD dwRead; int nTotal = 0; HGLOBAL hMem; //目的のURLの入力 char szUrl[] = "hogehogehgoe.co.jp/hoge.jpg "; hInet = InternetOpen("hoge",INTERNET_OPEN_TYPE_PRECONFIG,NULL, NULL, 0); if (hInet == NULL) return -1; hUrl = InternetOpenUrl(hInet, szUrl, NULL, 0, 0, 0); if (hUrl == NULL) return -1; //lpszSrcに1バイトのみ確保 hMem = GlobalAlloc(GHND, 1); lpszSrc = (char *)GlobalLock(hMem); while (1) { InternetReadFile(hUrl, szBuf, (DWORD)sizeof(szBuf) - 1, &dwRead); szBuf[dwRead] = '\0'; //読み出す物がなくなったのでループ脱出 if (dwRead == 0)break; //必要バイト数の計算 nTotal += dwRead; //確保領域の大きさ変更 hMem = GlobalReAlloc(hMem, nTotal, GMEM_MOVEABLE); if (hMem == NULL) break; lpszSrc = (char *)GlobalLock(hMem); if (lpszSrc == NULL) break; strcat_s(lpszSrc, nTotal+1, szBuf); } 続く
255 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 21:07:14 ] strcat? 画像の途中に 0x00 があったら、そこで切れない?
256 名前:253 mailto:sage [2009/08/06(木) 21:07:18 ] //ファイル出力処理 std::ofstream fileout; fileout.open("D:/hoge.jpg"); // 出力ファイルをオープン if (!fileout){ MessageBox(NULL , TEXT("エラー!出力ファイルをオープンできません") ,TEXT("") , MB_OK); return -1; } fileout << lpszSrc <<'\n'; fileout.close(); //メモリの解放 GlobalUnlock(hMem); GlobalFree(hMem); //インターネットハンドルの解放 InternetCloseHandle(hUrl); InternetCloseHandle(hInet); 以上です。 すいませんがアドバイスください、お願いします
257 名前:253 mailto:sage [2009/08/06(木) 21:21:11 ] >>255 そうなんですか? じゃあ画像ファイルの場合どうしたらいいのでしょうか?
258 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 21:30:44 ] どこまで格納したか覚えておいて、memcpyで memcpy(&lpszSrc[現在の位置], szBuf, dwRead); 現在の位置 += dwRead; みたいな感じで
259 名前:253 mailto:sage [2009/08/06(木) 21:51:36 ] >.258さん、ありがとうございます。 >>254 のサンプルプログラムのwhileループの前で int nowI = 0; と宣言して whileループの最後のstrcat_sをコメントアウトして下の二行を追加しました。 memcpy(&lpszSrc[nowI], szBuf, dwRead); nowI += dwRead; でもできませんでした。なにか間違ってますでしょうか? ファイルは作成されてるんですけどデータがほとんど入っていないようで 画像ファイルとして開けません。 うう・・・ 別にwininetにこだっているわけではありません。 C/C++(VC+ EE)でweb上の画像をダウンロードする方法が他にあるのなら wininetじゃなくてもいいです。
260 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 22:20:19 ] おまえは、まず、バイナリデータをファイルに書き込んで、それを読み込むことが出来るのか? 話はそれからだ。
261 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 22:37:57 ] fprintfで書いてるんじゃなかろうな
262 名前:253 mailto:sage [2009/08/06(木) 22:51:10 ] >>おまえは、まず、バイナリデータをファイルに書き込んで、それを読み込むことが出来るのか? うぅ、できません・・・ どうやら全然基礎が足りないみたいです。 もう一度勉強しなおします。 スレ汚してすいませんでした。
263 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 00:21:20 ] 今時ポインタがあるプログラミング言語なんてゴミ らしいのですが いまどき一番需要のあるプログラミング言語は何でしょうか?
264 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 00:30:01 ] >>263 スレタイ読め ・・・っとただの釣りだったか。
265 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 02:05:25 ] char (*a)[10]; a = malloc(10 * n * sizeof(char*)); とすれば、n行10列のメモリ領域を確保できると思います。 しかし、実際にこの領域に格納したいデータは、 hoge0、hoge1、…、hoge100、… のように、添え字がついており、長さがどんどん長くなります。 極端な話、char (*a)[100]; のように、十分に大きい値に設定しておけば問題ないのですが、 何かメモリ領域をうまくとる方法はありませんか。
266 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 03:06:38 ] char (*a)[10]; a = malloc(n*sizeof(char [10])); sizeof(char *)で何をしようと思ったのか理解できないのだが もう少し詳しく書いてくれると良い情報が聞き出せるかもね
267 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 04:37:52 ] reallocしたいとか vector使えとか そういう話じゃないかね
268 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 05:15:11 ] ジャグ配列が欲しいって話だろ
269 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 12:06:41 ] explicitをコピコンに使うと値渡し・返しができなくなるんだけどそういうもんなの?
270 名前:phenix mailto:sage [2009/08/07(金) 16:16:32 ] >>269 hoge a=b;で渡せないって意味ならそう。 hoge a(b);で渡せる。
271 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 18:47:28 ] フェニックスさんキタ!!
272 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 12:24:01 ] 関数の仮引数名に悩む場合 (どうすれば分かりやすくなるかな?とか) どう考えて付ける?
273 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 12:32:22 ] 変数名と同じ扱いでいいんじゃない?
274 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 12:36:32 ] >>273 俺は 同じ型の引数を持つ場合、 void foo(hoge_1, hoge_2) の様にしているんだが、 果たしてこれで分かりやすいと言えるのだろうか。 void foo(hoge_lhs, hoge_rhs) とどっちが分かりやすいだろう? と言うか分かりやすい引数って何だろう?
275 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 12:56:01 ] ユニークな名前付ける方がいいよ file_copy(file1, file2) より file_copy( src, dst ) みたいに
276 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 13:01:10 ] 判り易くしようとすると変数名が長くなりがちだから、 そこらへんのバランスをどうするかが難しいな。
277 名前:272 mailto:sage [2009/08/08(土) 13:06:24 ] みんなありがとう。 指針とさせてください。
278 名前:デフォルトの名無しさん [2009/08/08(土) 16:23:05 ] windows xp でファイルの存在を確認したい プログラムを書きたいのですができなくて困っています。 開発環境はVC++ 2008 Express Edition(win32 プロジェクト)でやっています。 下のプログラムのように、LPCWSTR型にファイルパスを直接代入すれば できるのですが、ファイルパスはstd::string型の変数で扱いたいです。 LPCWSTR lpszFilePath = TEXT("test.jpg"); if( PathFileExists( lpszFilePath ) ) { cout << "指定されたパスにファイルが存在" << endl; } else { cout << "ファイルはありません" << endl; } std::stringからLPCWSTRへの型変換の問題になると思うのですが これがわかりません。
279 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 16:34:08 ] LPCWSTR は Long Pointer to Const Wide String なので C++標準に置き換えると const wchar_t *になるよね? なので、std::stringでは扱えません。 std::string を使う場合は LPCSTR を使いましょう。
280 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 16:50:05 ] >>278 AとWを相互に変換するライブラリがあるらしいよ。使ったことないけど… msdn.microsoft.com/ja-jp/library/87zae4a3 (VS.80).aspx #include <atlstr.h> std::string s = "test.jpg"; LPCWSTR lpszFilePath = CA2W(s.c_str());
281 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 16:55:57 ] 俺も>>279 だな LPCWSTR → LPCSTR PathFileExists → PathFileExistsA
282 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 17:03:47 ] Standard Edition 以上なら CString ですんじゃうんだけどねぇ。 MFCは嫌い? あ、そう。
283 名前:278 mailto:sage [2009/08/08(土) 17:06:36 ] >>279-281 ありがとうございます、できました。 string hogeStr = "test.jpg"; LPCSTR lpszFilePath2 = hogeStr.c_str(); if( PathFileExistsA( lpszFilePath2 ) ) { cout << "指定されたパスにファイルが存在" << endl; } else { cout << "no file!!!!!!!!!!!!!!!!!" << endl; } ちなみに>>280 さんのATL(#include <atlstr.h>)は Express editionでは使えないみたいです。 ttp://www.microsoft.com/japan/msdn/vstudio/2008/product/express/aboutexpress.aspx もう、やりたいことができたのでいいんですけど・・・ ともかく皆さんありがとうございました。
284 名前:278 mailto:sage [2009/08/08(土) 17:09:20 ] 更新しわすれた・・・ >>282 そうですね、Cstringも同じですね。 嫌いというか今はただお金をかけたくないんだけなんですけどね・・・
285 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 17:18:30 ] ナロー文字とワイド文字の混在は厄介だね。 char、wchar_t のかわりに TCHAR マクロを "文字列", L"文字列"のかわりに _T("文字列") マクロを使い、 さらに プロジェクト→プロパティ→構成プロパティ→全般→文字セットで 「設定なし」を選んでプロジェクト全体をshift-JIS標準に。 そうすればlocaleとかwstringとかwcoutとかostream_iterator< wchar_t >とか いちいち考えなくてすむ。
286 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 19:16:17 ] いやいや、stringのほうを両対応に変えようよ。 typedef std::basic_string<TCHAR> tstring; tstring filePath = TEXT("test.jpg"); if ( PathFileExists( filePath.c_str() ) ) { cout << "指定されたパスにファイルが存在" << endl; } else { cout << "ファイルはありません" << endl; }
287 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 20:20:47 ] でもその tstring は cout に渡せるときには wcout には渡せず、 wcout に渡せるときは cout に渡せないというような厄介なことになるよ。 Win APIやMFC、ATL側はひとつの名前で char と wchar_t に破綻なく処理を分岐してくれるけど C++ 標準で同じことやろうとすると膨大なマクロなりtypedefなりを組むことになる。 その上、結局プログラマに「それはcharなのかwchar_tなのか」ということを意識させることに。 …と、思う。素直にMicrosoftの標準に従っといたほういい。 Windowsの開発環境は特殊だから。
288 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 20:44:49 ] toutを作ればいいじゃない
289 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 20:56:39 ] Microsoft標準に従うというのはプロジェクト全体をshift-JIS標準にすること?
290 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 21:07:05 ] 汎用テキストマッピング(_T()とかTCHARとか使うやつ)なんて破綻してるから使わないほうがいいよ。 実際の現場で、文字列の編集のある処理で、ワイド文字とマルチバイト文字の両方で 動くように書いてるやつなんて、すごい少数だろ。 さらに、両方でテストしてるところなんて皆無だろうし。 (テスト以前に両方でコンパイルを通してるところもなさそう) 汎用テキストマッピングを使っても、実際には片方でしか動かないコードしかできないし、 いまさらwin9x系に対応する意味とかないし、最初からワイド文字きめうち問題ないよ。 問題ないっていうか、変にワイド、マルチ文字両たいおうしたつもりのコードのほうが 問題おこしそう。
291 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 21:16:41 ] つーか、相当処理がカツカツじゃなければ、一旦なんらかの内部コードに変換して統一した方がいいと思う。 まぁ、扱う入力データの種類にもよるが。
292 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 22:49:27 ] >変にワイド、マルチ文字両たいおうしたつもりのコードのほうが問題おこしそう。 まったくそのとおりだと個人的にも思うが tstring のようにC++標準を両対応にするくらいなら まだTCHARとか使っておいたほうが安全だと思う。
293 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 00:45:30 ] C言語で動画処理をしようと思っています aviファイル読み込み→キャプチャ→RGBに対してフィルタ処理→表示 というようにしたいのですが、キャプチャしたときにRGBをしまう配列を指定できないでしょうか? 具体的には unsigned char を四つ持つ構造体に対して、ひとつメンバを余らせて一画素ずつ入れたいです 現在OpenCVで試しているのですが、RGBはunsigned char型の配列に自動的にしまわれてしまい、 キャプチャの値を構造体に入れなおすと時間がかかってしまいます これができればOpenCVでなくてもかまわないので、誰かお知恵をお貸しください
294 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 01:17:04 ] なぜ「ひとつメンバを余らせ」たいのか、OpenCVがキャプチャしてくれた 配列じゃなぜダメなのか?C言語が良いのか? その辺をもう少し詳しく。 でないとDirectShowって言っちゃう。
295 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 02:58:51 ] 293です、詳しく説明します 実はCUDAというものでGPUを使った画像処理を行っているのですが、それを動画に応用したいのです 簡単にいえばCUDAでは4バイトずつデータにアクセスすると高速化する特性があります そこでひとつ空きを作って無理やり4バイトにし、構造体単位でアクセスを行っています これを空きなしの3バイトにしたところ10倍近く遅くなったので、1バイトのchar型だとさらに遅くなる可能性があります C言語がいいのはCUDAがC言語を拡張したものだからです
296 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 03:28:51 ] >>295 OpenCVを使うのであれば IplImageを作るときにIPL_DEPTH_8Uにするのではなく IPL_DEPTH_32S又はIPL_DEPTH_32Fにして宣言すれば4Bになるんじゃないでしょうか? imageDataのR,G,Bは8bit*4なのに注意してください。 参考にどうぞ rest-term.com/contents/other/technote/index.php/OpenCV#content_1_6
297 名前:293 mailto:sage [2009/08/09(日) 12:55:44 ] ありがとうございます! ためしてみます
298 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 15:08:07 ] 引き数にだけ文字列を使いたい時でもconst string&使ったほうがいいの?
299 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 15:12:42 ] >>298 何を言っているのかわからん。
300 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 15:21:28 ] >>298 もしかしてこういうことか? void foo(const string& s) { cout << s << endl; } void bar(const char* s) { cout << s << end; } int main() { foo("footest"); // リテラル文字列をstring&に渡す bar("bartest"); // char*に渡す } こういう話だったら、const char* でもいいだろうけど char*とstringが混在すると面倒だから俺は全部stringに統一
301 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 15:55:20 ] そんなかんじですね ヘッダ解析のコストもあるしchar*でわたして必要ならソースでstringにかえればいいかなと・・・
302 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 16:01:04 ] C++ code - 21 lines - codepad ttp://codepad.org/ADzqt4PN struct Animalのstatic constなメンバであるweight = 10; を、Animalを継承したHumanで別の数字に変更したい場合、 このような方法でよろしいでしょうか?
303 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 16:25:57 ] >>302 それでおk。 あと struct Animal { static const int weight = 10; }; が他人が作った物である場合、 struct Human : Animal { enum{ weight = 50 }; }; こうやって書き換えた方が良い。 互換性が高い。
304 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 20:06:43 ] >>303 互換性ってなんの?
305 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 20:14:18 ] >>303 enum って何の略か分かってる?
306 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 20:18:36 ] >>305 enumハックしらないの?
307 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 20:20:52 ] 互換性って古めのコンパイラだと前者を配列の宣言に使用できないとかそういうこと?
308 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 22:27:30 ] いまさらenumハックを自信ありげに言われてもなあ
309 名前:302 mailto:sage [2009/08/09(日) 23:18:20 ] ありがとうございます。 enumハックで行かせていただきます。
310 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 23:40:46 ] よせ、あくまでハックはハックだ 正攻法には劣る
311 名前:デフォルトの名無しさん mailto:sage [2009/08/09(日) 23:57:49 ] >>308 いくつかの環境で開発をしたことがあるなら当たり前の知識である enumハックのコードを見て、enumが何の略かなんて問うのもどうかと思うよねw
312 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 00:04:28 ] >>305 enumハックをしらないやつがなんでまた偉そうにw
313 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 00:06:07 ] >>310 劣るかなぁ?どう劣る? 読みづらいとか?
314 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 01:22:44 ] たびたびすみません、293です 296さんのサイトを見てみたのですが、どうやらこちらの説明不足だったようです 一つのチャンネルを4バイトで表したいのではなく、ピクセルそのものを4バイトで表したい つまり、cvCreateImage(cvSize(x, y), IPL_DEPTH_8U, 4); このようにしたかったのです それで実際に試してみたのですが、うまくいきません キャプチャを cvQueryFrame で行っているのですが、おそらくここでメモリを取り直されているのだと思います 実装部分を探して改良しようとも思ったのですが見つかりませんorz 半分スレ違いみたいな内容ですが、解決方法があったらご教授ください
315 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 01:55:20 ] >>314 Grabが3yte/pixelで行われる限り、一度は3byte/pixelから 4byte/pixelへの 拡張をしてやらないといけないと思うよ。 OpenCVでやるか(cvCopy?)、自前の関数でやるかは別として。
316 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 02:06:10 ] >>314 「cuda rgba」でググったらぴったりのものが出てきた。 wiki.livedoor.jp/mikk_ni3_92/d/OpenCV::RGBA%B2%E8%C1%FC%BA%EE%C0%AE
317 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 04:48:35 ] 生成と同時にコンストラクタに値を与えたいオブジェクトがあるので、 CTest* ctest[10]; for(int i=0;i<10;i++){ ctest[i] = new Ctest(); } と統一してるんですが、最初に要素数を決めなきゃいけないのと、 newとdeleteを使う分、かったるいので vector<CTest*> ctest; for(int i=0;i<10;i++){ ctest.push_back( ? ); } って風にしようとしてるんですが、ここで「?」になにも入れないと 「0個の引数は指定できない」と怒られます この場合「?」の部分はCTestコンストラクタに渡す引数になると思ってたんですが、 引数がない場合はどうすればいいでしょう? やはりnewとdeleteを使わなきゃいかんのでしょうか
318 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 05:46:18 ] vector<CTest*> ctest(10); でいけたような。
319 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 06:17:46 ] >>317 CTest*のvectorでしょ push_backするのはCTest*じゃないの? ctest.push_back(new CTest()); とか ctest.push_back(NULL); とか・・・
320 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 07:05:40 ] ctest.push_back(new CTest()); とか ctest.push_back(NULL); とか ctest.resize(i+1); ctest[i] = new ctest(); とか試してみたけど、 error LNK2001: 外部シンボル "__CrtDbgReportW" は未解決です error LNK2019: 未解決の外部シンボル __CrtDbgReportW が 関数 "public: class Ctest * & __thiscall std::vector<class Ctest *,class std::allocator<class Ctest *> >::operator[](unsigned int)" (??A?$vector@PAVCtest@@V?$allocator@PAVCtest@@@std@@@std@@QAEAAPAVCtest@@I@Z) で参照されました。 Main.obj なにこれ(゜д゜)
321 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 07:59:13 ] 失礼、ランタイムライブラリをマルチスレッド(/MT)から マルチスレッドデバッグ(/MTd)に変えたら解決しました。 理屈はわかりませんが・・・ CTest.push_back( new CTest(引数) ); でいけそうですが、この場合、指定のオブジェクトを破棄するとき deleteで指定のアドレスを破棄してから、vectorのポインタを破棄する、 というクドいコードになりますね・・・ かといって、vector<CTest>と、ポインタで持たずにnewを使わなければ 引数付きコンストラクタでの初期化がややこしくなりますし・・・ しかたないですかね
322 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 11:36:10 ] >>321 それは仕方がない。というかnewした以上、deleteするのは当たり前。 vectorにオブジェクトのポインタをプールするなんてまぁよく聞く話だし。 デストラクタに全要素deleteするコード書いとけ。
323 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 11:38:19 ] >>321 >引数付きコンストラクタでの初期化がややこしくなりますし・・・ そもそも、ここが判らん。
324 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 12:46:32 ] >>321 boost::ptr_vectorで解決
325 名前:293 mailto:sage [2009/08/10(月) 14:50:51 ] >>315 確かにキャプチャ部分がこうなっている以上コピーするしかないですよね Grabを自前で実装できればよいのですが、キャプチャ自体がどのように行われているかさえ まだ理解していないので当分コピーで済ませていこうと思います ありがとうございました >>316 このようなページを知らなかったとはまだまだ勉強不足のようですorz もうちょっと自分で調べてみようと思います ありがとうございました
326 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 15:59:01 ] >>321 それなら std::vector<boost::shared_ptr<CTest> > ctest; ctest.push_back(boost::shared_ptr<CTest>(new CTest())); コンパイルして書いてるわけじゃないから何か変だったら適当になおして
327 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 18:40:28 ] const char * const p= "有効な文字列p"; const char * const q= "有効な文字列q"; このようなpとqに格納されている文字列が等しいかどうかを調べる場合、 strcmp を使う方法と std::string(p)==q や std::string(p)==std::string(q) とする方法と、どちらが望ましいでしょうか?
328 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 19:14:12 ] そら、態々メモリ割り当てずに strcmp が速いでしょ。
329 名前:327 mailto:sage [2009/08/10(月) 19:17:27 ] >>328 ありがとうございます。
330 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 20:26:59 ] 男キャラを担当する女声優はわんさかいるけど、 女キャラを担当する男声優なんて聞いたことない
331 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 20:27:39 ] 超誤爆
332 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 20:36:20 ] どのスレだよw
333 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 21:40:42 ] class Aからclass Bへの暗黙の型変換が許されている状況で、 A hoge; として B piyo = hoge; B piyo(hoge); B piyo = (A)hoge; B piyo = static_cast<A>(hoge); これら4つは全く等価だと考えてよろしいですか?
334 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 23:27:55 ] 少なくとも一番目と二番目は全く違うような。
335 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 23:36:36 ] >>334 違いますか? どのあたりが違いますか?
336 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 02:15:35 ] 同じだよ。どれもコピーコンストラクタが呼ばれる。 ときおり初心者が1番目の式を代入と勘違いするけど 普通の教科書にはそれは代入じゃねぇンだよって説明が書いてあるので それを知らないのは教科書をよく読んでいない証拠。 もし書いてないなら、その教科書は資源ごみにでも出したほうがいい。
337 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 05:33:53 ] すんごい初歩的な質問だと思うんですけど、 deleteで解放をし忘れしているプログラムを何度も動かした場合、 不要なデータはPC上に残り続けるんでしょうか? 溜まったそれらのデータをなんとか解放、削除したい場合は どうすればいいんでしょ?
338 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 06:04:39 ] 一度プログラムを終了させれば まともなOSなら deleteしていなくても問題ない。 少なくとも、普通の方法で確保したメモリを プロセスが終了しても解放しないものはまず無い。 メモリ以外のリソースはそうでもない場合もある。
339 名前:337 mailto:sage [2009/08/11(火) 06:10:01 ] 多謝
340 名前:333 mailto:sage [2009/08/11(火) 10:32:22 ] >>336 やっぱり全く等価ですよね。 どうもありがとうございます。
341 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 10:37:12 ] explicitを付けて(1)を使えなくしてやるー
342 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 10:53:55 ] >>334 こいつ恥ずかしいなwww >>338 メモリ管理問題 ttp://kmaebashi.com/programmer/c_yota/malloc.html 熟読せよ
343 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 11:17:26 ] >>342 言いたいことがあるなら自分の言葉でどうぞ。
344 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 11:24:16 ] 共用体について質問です union AB{ A a; B b; }; void init(union AB ab){ union AB ans; ans = ab; } void main(){ init( (A)10 ); // 10をA型にキャストして引数に与える init( (B)10 ); // 10をB型にキャストして引数に与える } ・・・このソースでなにがしたいかと言うと、 引数に与えた型を判別して、A型ならans.aに、B型ならans.bに 自動的に代入してほしいのです。 考え方が間違えてるのか「AからABに変換できません」とエラーが出ます この場合、どうしたらいいのでしょうか?
345 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 11:27:14 ] 共用体にA用とB用のコンストラクタを設ける
346 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 11:28:05 ] >>344 >引数に与えた型を判別して C++ でも使いましょう。
347 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 11:29:05 ] >>344 まて、その前にクラスはまともに使えるのか? 例えば >>333 この様なclass Aとclass Bを記述することは出来るだけの技量はある?
348 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 11:36:51 ] クラスは普通に使ってます。 というかこの質問が、同じクラスのメンバ変数が2タイプに分かれる場合があって、 2つ変数を設けて片方を空っぽにするのが気持ち悪いので、共用体を使おうとしてるのです (初期化関数を統一したいのもあります) ただ「共用体にコンストラクタを設ける」といわれるとなんのことやら・・・ 共用体がクラスのように扱える、ということでしょうか
349 名前:342 mailto:sage [2009/08/11(火) 11:39:39 ] >>343 こいつ(は無知なのに「全く違う」という強い否定を使い それが全くの初歩の話題であったことを知り) 恥ずかしい(とさぞかし思っているだろう)なwww で満足?
350 名前:343 mailto:sage [2009/08/11(火) 11:41:05 ] >>349 あ、いや、後段の方。
351 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 11:41:40 ] >>348 クラスと同じように共用体もコンストラクタやデストラクタを持てる union AB{ .... AB(A a){ this->a = a; } AB(B b){ this->b = b; } };
352 名前:347 mailto:sage [2009/08/11(火) 11:41:42 ] >>348 >クラスは普通に使ってます。 じゃあとりあえず、 自分のコードのunionになっている場所をclassに単純に書き換えて 実現してみてよ。 それがすぐ答えにつながる。
353 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 12:06:41 ] >>342 理屈上はそうかも知れんが、 free()しないとメモリを管理できてないような気がする。 特にdeleteしないとデストラクタがどう動くかよく分からん。
354 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 12:11:00 ] つーか、共用体にする意味があるのか? 気持ち悪いと言う理由だけでは意味がなさ過ぎる。 どちらかだけ有効だと言うのであれば、boost::optionalでも使って有効性をチェックすればいいだけの気もするが。
355 名前:342 mailto:sage [2009/08/11(火) 12:12:23 ] いや俺はfree()しないことに反対な人だから。 ただこういう意見な人も居るよっていいたかっただけだ。
356 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 12:12:23 ] >>353 deleteしなければデストラクタが動くわけないじゃん。 OSは、クラスの管理までしてくれるわけじゃないよ。
357 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 12:13:11 ] >>354 boost::optional の使いどころおかしくねぇか? valiantじゃなくて?
358 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 12:23:55 ] >>357 元質の趣旨が判らんから勝手に推測した。valiantを使うべきならそうしてくれ。
359 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 20:28:12 ] class hoge { public: static fuga(); }; これって普通の関数と比べてなんかいいことあんの?
360 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 20:35:16 ] >>359 静的メンバ関数でググれ
361 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 20:38:17 ] >>359 1・それがいいか悪いかは別として、似たようなstatic関数が100個くらいあったとき まとめて他のクラスのfriendにできる 2・hogeのstaticじゃないprivateなメンバに触れる
362 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 20:55:02 ] あぁプライベートメンバに触れるのかそれは便利そうだ 二項演算しとかに使えそう
363 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 20:59:09 ] とおもったらオペレーターは静的にできなかった・・・ ぬかよろこびだったでござる
364 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 21:33:44 ] てか、コンストラクタをprivateにしてstaticなファクトリ作るくらいじゃない?
365 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 21:44:24 ] >>359 コールバック関数に使える。
366 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 22:04:07 ] ttp://codepad.org/84SNOtSp の std::numeric_limits< double >::quiet_NaN()==std::numeric_limits< double >::quiet_NaN() の部分はfalseとなるようですが、 これは言語仕様そうなるものですか? それとも実装依存でしょうか?
367 名前:366 mailto:sage [2009/08/11(火) 22:05:34 ] なお、 g++, VC++2008に食わせた後実行したらttp://codepad.org/84SNOtSpと同じ結果でしたが、 bccに食わせた後実行したらその実行ファイルは不正終了しました。 > これは言語仕様そうなるものですか?
368 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 22:22:22 ] ttp://codepad.org/LEWBiHCD VC++だと実行結果が100になる この記述でコピコンが呼ばれるかどうかは仕様で決まってないのかな
369 名前:367 mailto:sage [2009/08/11(火) 22:26:58 ] >>368 私の環境のg++ 4.4.0では100になりましたよ。 bcc 5.5.1でも100になりましたよ。 codepadが100にならないのは不思議ですね。
370 名前:デフォルトの名無しさん [2009/08/11(火) 22:33:58 ] >>342 の知ったかバカ >>337 の質問が >deleteで解放をし忘れしているプログラムを何度も動かした場合、 >不要なデータはPC上に残り続けるんでしょうか? という内容で、 >>338 の回答が >一度プログラムを終了させれば という、限定された条件なんだけど、わかってるのかね?
371 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 22:36:28 ] >>366 TがNaNである値nを持つとき、 型Tの値nがNaNである ⇔ すべてのTの値xに対してx ≠ nである ゆえにNaN ≠ NaNである quet_NaNは型がNaN値を持つとき、 LIA-1(ISO/IEC 10967-1)の要求を満たすとあるので(ISO/IEC 14882:1998 18.2.1.2.45) 恐らく規格準拠だと思うよ 詳しくはC++98とLIA-1をあたってくれ 多分NaNに関してはLIA-1に1段落目で書いたことのようなものが載ってる筈
372 名前:366 mailto:sage [2009/08/11(火) 22:39:12 ] >>371 ありがとうございます。 助かりました。
373 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 00:12:29 ] codepad.org/oRku7d6S www1.axfc.net/uploader/Img/so/55595 二回目のバイナリ書き込みがなぜかテキスト書き込みになってしまいます なぜでしょう?
374 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 01:52:18 ] >>373 おおざっぱに言うと、式の中にcharが出てくるとint型に拡張される。「汎整数昇格」で検索すると解説が出てくるかも。 だから2回めの書き込みは、cout << (int)(ch * 2) と同じこと。
375 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 02:03:11 ] >>370 どうした? >>337 >>338 >>342 の流れはfreeしなくていいよ派の滞りない流れではないか?
376 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 03:10:30 ] もしかして、単に優越感に浸りたいだけの基地外さん? もしかして、単に優越感に浸りたいためだけに、自分に都合の良い解釈しかしない人?
377 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 03:19:45 ] バカは相手にすんな
378 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 03:41:01 ] >>375 342はfreeしろ派じゃねーの?
379 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 04:04:11 ] freeしろ派があのリンク先を持ってくるかなあ? リンク先を見た上で、しかしこういう考えのもと、やはりfreeすべきだという内容がレスにあるわけでもないし
380 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 04:41:00 ] いい加減freeの話題で荒れるのは勘弁してくれないかな。
381 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 05:16:11 ] 今までの話を纏めると 結論:必ずfreeすべし
382 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 05:47:53 ] この話は明示的なメモリの解放を行うことができる言語がある限り繰り返されると思うよ 片手間で作ったちょっとしたツールでせっせと例外捕捉して必死でメモリ解放するとかやってられんしょ
383 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 09:44:43 ] >>374 その解釈はおかしい。 何故ならば、ch * 2が既にintだと言っているのだから(int)(ch * 2)は(int)(int)....(ch * 2)と言う位意味がない。 敢えてその顰に倣って書くのなら、(int)ch * 2と言った処だろう。
384 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 12:38:32 ] ていうかバイナリモードで開いてるのになんで文字としての数字が保存されてんの? って聞きたかったんすけど・・・
385 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 12:40:27 ] >>384 std::cout << '0'としても、std::cout << 0としても出力が同じなのと同じ理由。 バイナリモードかどうかは全く関係ない。ついでに言えば、大抵のOSではテキストモードとバイナリモードの違いさえない。
386 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 12:45:57 ] テキストモードでオープンすると '\032' から先を読まない処理系が昔あったなあ。
387 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 16:59:09 ] class Hoge { operator double(){return 1.0;} }; というクラスがあるとき Hoge e; printf("%f\n", e ); と言うコードはコンパイルが通りますが、表示されるのは1.0ではありませんでした eは何型にキャストされてからprintfに渡されているんですか?
388 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 17:07:20 ] >>387 キャストされないで、Hogeのままスタックに詰まれる。 それみたいにメンバ変数のないクラスのでやるとどうなるかしらないけど。
389 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 17:10:58 ] 正確には、もうひとつのインスタンスが (コピーコンストラクタを使って)スタック上に作られる、ってことだね。
390 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 17:27:39 ] >>388-389 ということは、やりたいようなことはたぶん出来ないんですね 面倒でも(double)eとするしかないと ありがとうございました
391 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 18:02:12 ] >>386 \032って何ですか?
392 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 18:14:04 ] >>391 Control-Z。MS-DOSやCP/MのEOF文字 CP/MというOSではファイルサイズを128の倍数でしか管理できなかったので、 データの最後にEOFをつける必要があった
393 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 18:29:35 ] >>384 じゃあ何が保存されればいいの?
394 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 19:00:57 ] >>392 ありがとうございます。
395 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 21:04:36 ] 安西先生、引き数と返り値の型も隠蔽したいです
396 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 22:00:45 ] c++で2重起動を防止する方法を教えてください。 環境linux+gccです
397 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 22:18:02 ] セマフォを使う
398 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 01:43:06 ] mutex
399 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 22:13:12 ] class hoge { public: class foo {...}; foo fuga(); }; こんな場合って普通fooの定義は外にだすもん?
400 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 22:21:56 ] >>399 クラスのネストくらいふつーだと思う。
401 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 22:28:08 ] クラス内クラス定義はpimplイディオムなんかの時に普通につかうよ
402 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 22:30:13 ] >>401
403 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 22:45:43 ] >>399 そういうことをやり始めたあたりから楽しくなってくるんだぜ(笑)
404 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 23:10:16 ] 前スレで登場したテンプレートを 適当に貼り付けてみる。 template<typename T, std::size_t N> inline std::size_t numberof(T (&)[N]) {return N;} まだまだ納得できない俺がいる。
405 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 23:15:13 ] ray.sakura.ne.jp/template/ccgen.html これのバブルソートのテンプレート化も面白いな
406 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 23:35:31 ] >汎用性の為に速度が犠牲になつてしまふことは、なんとしても避けなければならない。 執念が感じられるな(笑)
407 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 23:37:24 ] メンテ性悪すぎワラタ
408 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 23:47:03 ] 何かあったんだろうなw
409 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 00:10:52 ] C/C++で書くのは実行速度気にするからで間違った方向じゃないと思うがね アセンブラやFORTRANでブイブイ云わせてるオッチャンは失笑するかもしれんけど
410 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 04:13:44 ] 同じ関数にわたす引数が場面によって違う場合、どうするのが一般的ですか? パターン1: if( case == 1 ) test( a, c, d, e, f); else test( b, c, d, e, f ); パターン2: if( case == 1 ) temp = a; else temp = b; test( temp, c, d, e, f ); このどちらかでいいじゃん、と思われたかもしれませんが パターン1の場合、引数リストが10行近くに渡る場合、 引数1つの違いのために10行余計に食うハメになります・・・ パターン2の場合は、1つの引数のためにわざわざ tempを用いてるのが醜いです 引数リストの中でif文を使えるようなら、 それが一番いいイメージなのですが・・・
411 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 04:40:19 ] 3項演算子でググれ
412 名前:412 mailto:sage [2009/08/14(金) 06:01:09 ] できました。ありがとうございます
413 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 09:17:37 ] >>412 自己完結乙。
414 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 17:24:44 ] privateなstaticメンバ変数と 無名名前空間内の変数ってどうちがうんでさ?
415 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 17:36:16 ] >>414 どういうソースのこと?
416 名前:デフォルトの名無しさん [2009/08/14(金) 17:42:44 ] Cの勉強を始めたばかりなんだけど、メモ帳に、参考書にある通りのソースプログラムを書いてリターンキーを押しても実行結果が表示されません。 原因を教えてください。
417 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 17:45:13 ] >>416 釣り?マジ?
418 名前:デフォルトの名無しさん [2009/08/14(金) 17:48:21 ] >>417 マジです。
419 名前:デフォルトの名無しさん [2009/08/14(金) 17:53:50 ] 俺は、ちゃんと実行されるけど、 不正コピーのWindows使ってるから、動かないのじゃね?
420 名前:デフォルトの名無しさん [2009/08/14(金) 18:04:20 ] 普通のXPを使ってます。 リターンキーを押しても改行されるだけなんですが(T_T)
421 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 18:08:58 ] その糞参考書を晒せ
422 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 18:14:42 ] これはたしかに参考書が気になる
423 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 18:20:25 ] 以前もさらっと「コンパイルが必要です」ってある参考書ではまってた奴がいたような。
424 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 18:42:14 ] >>415 class pool { private: static map m; (ry }; みたいなコード これだと無名グローバル変数でもいいように思えるんだけど・・・
425 名前:417 mailto:sage [2009/08/14(金) 18:44:07 ] codepad ttp://codepad.org/ ここで実行しろ。
426 名前:415 mailto:sage [2009/08/14(金) 18:44:58 ] >>424 poolの外からmにアクセス出来なくね?
427 名前:デフォルトの名無しさん [2009/08/14(金) 18:57:08 ] 『明解C言語 入門編』 です。 これって名著と聞いてますが。
428 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 19:06:43 ] 良く売れてますよ。 でも、C言語の入門書でK&R第2版を超えるものはひとつもありません。 特にUNIXシステムインタフェースの章は重要で、 システム依存のコード(システムコールを用いるコード)とどのように折り合いをつけるか、 平易に説明してくれる入門書はこれくらいのものでしょう。 結局、C言語はアセンブラに近しいところで利用されるので このような低水準の話題は避けて通れないのです。 でも日本人が書いた入門書はそのへん全部無視しやがってアホか。
429 名前:デフォルトの名無しさん [2009/08/14(金) 19:17:12 ] >>428 ありがとうです。 K&Rの正式な書名をよかったら。書店で探してみます。
430 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 19:19:56 ] プログラミング言語C 第2版 ANSI規格準拠 B.W. カーニハン (著), D.M. リッチー (著), 石田 晴久 (翻訳)
431 名前:デフォルトの名無しさん [2009/08/14(金) 19:34:26 ] >>430 ありがとうです。 明日さっそく書店へ行きます。
432 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 19:54:38 ] >>416 入力した c ソースをコンパイルして、実行ファイルを指定して実行していますか? 意味がわからなければ、さわりでコンパイルの方法が書いてある書籍をさがすか、人にきいてみてください。
433 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 19:55:53 ] >>431 最初の最初に読む書籍ではないことに注意してください。ある程度の経験が必要です。
434 名前:デフォルトの名無しさん [2009/08/14(金) 20:13:44 ] 最初の最初に読むのにいい本があったら教えて、誰かエロい人!
435 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 20:18:29 ] 書籍スレへどうぞ。
436 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 20:18:39 ] もともとC言語を他の言語の経験なしに最初に学ぼうという時点で無謀だ。w せいぜいテキストファイルを読み込んで集計する程度のプログラムしか書かないなら C言語を使う理由など皆無に等しく、そんなものはBASICで十分だろう。 C言語は(BASICに比べれば)難解で保守しにくく、 それでもなおC言語を使うのはC言語には低水準固有のパワーが備わっているからだ。 そういうプログラムを書きたいと望むものが K&Rの内容も読めないなら、 実際にプログラムをしようとしたとき、 C言語よりも遥かに難解なハードやOSを前にして ただただ途方にくれるだけだろう。
437 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 20:19:09 ] 入門レベルならWebでいいんじゃねぇの
438 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 20:28:47 ] BASICってVisualBasic? Cより難解で複雑で混沌としてんじゃねーか
439 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 20:30:36 ] 最初にC習って特に問題なかった俺は天才ということだな
440 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 20:44:06 ] >>439 俺もだ、天才同志よ。
441 名前:デフォルトの名無しさん [2009/08/14(金) 20:45:19 ] C言語だとファイルの削除はremove(fileName)でできましたが、 C++だとどうやってファイルを削除しますか?
442 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 20:50:55 ] std::remove(fileName)
443 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 20:52:40 ] >>442 ありがとうございます。 チュ♥
444 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 21:13:13 ] STDMETHODってなんでしょうか?
445 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 21:23:40 ] COMで使われるマクロです
446 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 21:27:03 ] そんな用語はないよ?
447 名前:デフォルトの名無しさん [2009/08/14(金) 21:31:45 ] 俺も秀才なんで、Cから始めます。
448 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 22:12:18 ] 俺おくてだから、勇気を出してCから始めます。
449 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 22:20:34 ] vecterとかmapのデフォルトコンストラクタってメモリ確保しないよね?
450 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 22:58:41 ] 実装依存だから確実ではないけど、普通は確保しないよ。
451 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 00:08:57 ] stlportって何ですか? ググってみると良いことずくめに書いてあるんですが。
452 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 00:33:47 ] 演算子のオーバーロードを勉強中です。 コンパイルエラー出ます。本のサンプルプログラムなんですが。 a.c:17: error: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second: string.h:21: note: candidate 1: char& String::operator[](size_t) a.c:17: note: candidate 2: operator[](char*, int) <built-in> です。原因は何でしょうか?エラーメッセージがよくわかりません。 もし、ソースコードが必要なら乗せます。
453 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 00:34:37 ] >>438 が釣りなのかどうか判断つかん
454 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 08:02:56 ] >>452 必要に決まってるじゃん。 codepad ttp://codepad.org/ ここで。
455 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 14:37:26 ] C++のサンプルコードが載ってるデザインパターンの本で良書あります?
456 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 15:43:32 ] >>451 VC6のころは必須だった。 今は別になくてもいい。
457 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 17:39:41 ] ゲーム内に存在するユニット(プレイヤー、モンスター、障害物など)にユニークIDを付けたいんだけど アドレスをintにして返すだけの基底クラスを継承させれば問題ないかな?
458 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 17:48:24 ] アドレスをハッシュにするのはよくある手段だな ポインタ型のサイズが変わったときにちょっとハマるかもしれんから ハッシュ同士を==,!=で比較する以外の使い方をするときには注意が必要になるだろう できれば専用の型でラップして使うべきだろうな
459 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 17:56:05 ] intptr_tなりUINT_PTRなりをtypedefしてxxx_IDとして用いれば大丈夫だろうね。
460 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 18:26:48 ] >>455 独習C++デザインパターンかなぁ。この手の本は殆どがJavaで書かれてるからC++の本は少ないな。
461 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 19:14:22 ] 「Java謎+落とし穴」という書籍の中でC++はリフレクションが弱い、との記述があったのですがこれは事実でしょうか? かなり古い本なので最近のC++のリフレクション周りについて知りたいです。 できればJava、C++、C#辺りのリフレクションの違いについて教えて頂けると有り難いです。 よろしくお願いします。
462 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 20:03:39 ] >>461 弱いどころか無いに等しいよ。 リフレクションが必要ならインタプリタ言語にまかせよう。
463 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 20:06:02 ] C/C++で、 aa(), bb(), cc() とした場合、この式の評価順序は aa()が最初で次がbb()で次がcc() ということは仕様で保証されていますか? 関数の引数の評価順序は保証されていないということだそうで。
464 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 20:15:32 ] >>463 この場合はコンマ演算子だから、左から右へ評価されることは保障されており、かつ値は最後に評価したものですね。
465 名前:463 mailto:sage [2009/08/15(土) 20:53:28 ] >>464 ありがとうございます。 ではそれに依存してコーディングしていきたいと思います。
466 名前:461 mailto:sage [2009/08/15(土) 21:07:09 ] >>462 ありがとうございます。 クラスやメソッドを実行時に決定したい場合などは諦めるしかないのでしょうか? あるいはそういう需要があること自体、設計がおかしいという判断になるのかな
467 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 21:11:00 ] >>466 > クラスやメソッドを実行時に決定したい場合などは諦めるしかないのでしょうか? C++には継承と仮想関数がありますからそれをうまく使ってください。 > あるいはそういう需要があること自体、設計がおかしいという判断になるのかな if(flag) {hoge.foo();} else {hoge.bar();} こんなことは良くやりますけど。 あとはC++には関数ポインタもありますねぇ。
468 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 21:21:59 ] 場合分けはさすがに無いだろw まぁJavaでもClassクラスなんて使うのは最終手段だし設計を見直すのが吉だろうな
469 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 21:36:03 ] >>466 ポリモーフィズムがあるんだから利用しない手はないだろ。 実行時に型を決定したいなんて結構あるんじゃないか? それがあってるのかどうかは知らんが。
470 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 22:20:55 ] C++プログラミングの筋と定石 (新紀元社情報工学シリーズ) この本を読むのじゃ。 お前様のほしい情報が載っておるぞ。 あたら高度だけど。
471 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 22:33:03 ] 滅茶苦茶古い本だぞそれ
472 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 22:57:12 ] 古いけどナイスガイ
473 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 22:58:16 ] 宣伝は他でやれ
474 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 23:01:16 ] 宣伝だと思うなら無視すればいいじゃない。 宣伝しなくても名著だからみんな知ってるだろうし。 MoreEffective C++でも推薦されてたくらいの本だから もちろん、君も知ってるよね?
475 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 23:23:04 ] あぁ原書は有名だけど翻訳が糞過ぎて読む気無くなったなそれ
476 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 23:25:28 ] どう見ても宣伝だわw
477 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 19:02:57 ] Baseクラスと、Baseをpublic継承したDerivedクラスがあります。 Derived hoge; void foo(const Base&);//1 void foo(const Derived&);//2 となっている時、 foo()//1にhogeを渡したいのですが、どうすればよいでしょうか? foo(static_cast<Base>(hoge)); だと無駄なテンポラリオブジェクトができてしまいますか?
478 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 19:41:38 ] // 値型のキャストだとコピーになるが、参照型でキャストすればコピーは発生しない foo(static_cast<Base&>(hoge));
479 名前:477 mailto:sage [2009/08/16(日) 20:00:14 ] >>478 ありがとうございます。 ということは Derived hoge; が const Derived& hoge = ... であった場合は foo(static_cast< const Base& >(hoge)); であっていますか?
480 名前:デフォルトの名無しさん [2009/08/16(日) 20:01:39 ] C++でもassertって使うの?
481 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 20:15:06 ] #include <iostream> using namespace std; class Base{}; class Derived : public Base {}; void foo(const Base&){cout << "Base" << endl;} template<class T> void foo(const T&){cout << "T" << endl;} int main() { Derived hoge; foo(hoge); return 0; } これでTが表示されるのは、 基底クラスへキャストするよりもテンプレートの方が優先される ためだと思いますが、 この動作はC++の仕様でしょうか?
482 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 20:37:48 ] >>480 使うよ。用途はCと一緒でしょ。
483 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 21:28:27 ] C++です。 ヘッダファイルに書かれた関数テンプレートを どんなときにinline宣言すべきか分かりません。 明らかに短い時はinline宣言しますが、 どのあたりの長さからしない方がよくなるのでしょうか?
484 名前:デフォルトの名無しさん [2009/08/16(日) 21:35:07 ] ほっとけばinline
485 名前:483 mailto:sage [2009/08/16(日) 21:38:31 ] >>484 ええと、ヘッダファイルに書かれた関数テンプレートでも 明示的にinlineと書かない限り (コンパイラによる最適化以外では) inlineにはならないと思っているのですが。
486 名前:デフォルトの名無しさん [2009/08/16(日) 21:50:02 ] 異なるcppファイルに同じヘッダを読み込んで、各々のオブジェクトファイルで実体化されたら リンク時にカチ合うじゃないか。
487 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 21:51:34 ] >>485 Efficient C++(Effectiveじゃないよ)の9章と10章に載ってなる。 具体的には130ページに、行数(命令数か)と呼び出し頻度で決めなさいと書いてある。 あと、見た目のコード自体は短くても実際はそうでもないことがあるから注意な。 まあ、コンパイラの判断でインライン展開されるからinlineと書いたところで 必ずインラインになるとは限らんしな。
488 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 21:52:23 ] すみませんが構造体配列の初期化で全てを同じ値にしたいのですが上手くいきません どこが間違っているのでしょうか? struct Piece_t { int Kind; int State; }; struct Piece_t Piece[(MAX_MASS + 2) * (MAX_MASS + 2)]={3,0};
489 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 22:01:08 ] 初期値は必要な数だけ与えてやらんとだめ struct Piece_t Piece[5] = { {3,0}, {3,0}, {3,0}, {3,0}, {3,0}, };
490 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 22:09:04 ] では要素数が可変の場合にはそれを上回る数を あらかじめ用意するしかないのでしょうか?
491 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 22:14:24 ] forで回すなり、memsetするなりあるだろう。配列なら要素数も分かるだろ?
492 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 22:17:25 ] ああ…forで回せば良いのか… 疲れてたみたいです アドバイス有難うございました
493 名前:483 mailto:sage [2009/08/16(日) 22:50:53 ] >>486 普通の関数ではそうですが、 関数テンプレートの場合はその限りではないと 記憶しています。 >>487 ありがとうございます。 Efficient C++は読んだこと無いので、 今度探ってみます。
494 名前:デフォルトの名無しさん [2009/08/17(月) 00:31:52 ] いつもデバックなしで実行しているのですが、 リリースモードで実行するにはどうしたらいいですか?
495 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 00:35:43 ] まず、使っているコンパイラーを(ry
496 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 01:33:32 ] Intel C++コンパイラです。
497 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 10:20:38 ] >>496 使っているIDEのマニュアルでも読んでください。
498 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 11:07:11 ] if(flag_1) return val_1; else if(flag_2) return val_2; else if(flag_3) return val_3; これと if(flag_1) return val_1; if(flag_2) return val_2; if(flag_3) return val_3; これはどちらが速いのでしょうか?
499 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 12:04:51 ] >>498 return文を使って関数から抜け出しているので、前者も後者も比較回数は同じになる。 また、return文を使って関数から抜け出しているので、前の条件が偽であるときしか後の条件を判断されないことになる。 よってelseを使う必要はない。 よって後者でおk。 ただ、速さが変わるかどうかは俺にはわかんね。
500 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 12:15:09 ] 繰り返し文でその都度printfで結果を表示させたいのですが 古いほうから消えていきます。結果を全部残すにはどうすればいいですか
501 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 12:16:12 ] >>500 リダイレクトする。
502 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 12:28:15 ] >>498 少なくとも私は後者の方が速くタイプできました。
503 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 12:36:21 ] >>501 なるほど。それでググったら出来ました。ありがとうございます
504 名前:498 mailto:sage [2009/08/17(月) 12:45:18 ] >>499 ありがとうございます。 速さは・・・elseがない方がむしろ速いとか、 あった方が処理が分かりやすくて最適化しやすいとか 同一のasmに落ち着くから関係ないとか色々と考えられそうです。 ま、あまり気にしないのが正解なのでしょうか。 BoostやGCCの実装とかで同じような物があるかどうか探してみたいです。
505 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 13:32:44 ] >>504 こっちに似たような話があるから気になるなら参加したら? 【初心者歓迎】C/C++室 Ver.67【環境依存OK】 pc12.2ch.net/test/read.cgi/tech/1247937958/
506 名前:504 mailto:sage [2009/08/17(月) 14:21:07 ] >>505 みんな同じようなこと考えるんですね。 行ってみるかもしれません。 ありがとうございます。
507 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 14:43:09 ] えっ?
508 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 15:13:20 ] タイピングを楽にする為だけの#defineもtypedefにしたほうがいいのかな テンプレートっぽいことができるのと#undefがある分有利な気がするんだけど
509 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 15:56:43 ] >>508 typedefに代えていけるならお薦め。 > テンプレートっぽいことができるのと そりゃtypedefに代えていけないってことじゃん。 > #undefがある分有利な気がするんだけど どうして?むしろ不利だろ? typedefなら同名の物とかち合ったらコンパイルエラーになれる。
510 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 21:16:01 ] 非同期ファイル読み書きには Win32APIのCreateFileしか方法ないの?
511 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 21:20:56 ] スレッドを使ってみるとか
512 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 22:33:25 ] >>498 gccでコンパイルすると同じになったからどっちも同じ
513 名前:デフォルトの名無しさん [2009/08/19(水) 09:21:13 ] C++でCGIをはじめました。POSTで日本語を受け取った場合URIエンコードされますがデコードのやり方が分からず困っています。 例えば あ であれば %82%A0になりますが どのようにすれば元の文字に戻せるのか わかる方いましたらよろしくお願いします。 ソースを頂けたらなおありがたいです。
514 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 09:37:31 ] スレチな気もするが… www.kinet.or.jp/hiromin/cgi_introduction/appendix/url_encode.html
515 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 10:20:59 ] .lib+.hで提供されているライブラリをまとめて適当な名前空間に入れたいんですが なにかいい方法はないでしょうか
516 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 11:26:18 ] >>515 .libだと真っ当な方法では無理。 せいぜいがDLLに隔離して新しいインターフェースを丸ごと書き直すぐらいかと。
517 名前:デフォルトの名無しさん [2009/08/19(水) 12:10:07 ] 514さん 大変参考になりました。 私もスレチかと思いましたがそれでも 教えて頂けて本当に感謝しております。ありがとうございました。
518 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 14:18:30 ] インターフェースに宣言されているメンバ関数をコンストラクタのように連鎖的に呼び出したい場合 スコープ解決して普通に呼び出しを繰り返すすほかになにかやり方はありますか?
519 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 16:37:47 ] >>518 具体的にどういうコードで問題になってるのかわからん。 インタフェースって抽象クラスのことか?
520 名前:デフォルトの名無しさん [2009/08/19(水) 17:19:45 ] pthreadについて。 pthread_createで作成したスレッドを、スレッド外から終了させたいのだが。 名前的にはpthread_t指定してpthread_killぽいと思ったんだが、うまくいってないぽ... どうすればいいの\(^o^)/
521 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 17:25:29 ] signal(pthread_killの第二引数)は何を指定した? まさか0じゃないだろうな? int pthread_cancel(pthread_t)じゃ駄目?
522 名前:デフォルトの名無しさん [2009/08/19(水) 18:31:55 ] 0さーせんwwwwww cancelで終了した! さんくす
523 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 20:17:23 ] ofsream.flush()でファイル出力時に ディスクの容量オーバーの場合エラーにする事てできます? 例外がスローされずにフリーズしてしまいます…
524 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 20:22:21 ] >>523 OSなどの環境は?
525 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 21:40:41 ] >>524 すいません、linux + c++ + gcc です。 プログラムからシェルコマンドでディスク容量の結果とって調べる とかは可能です?
526 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 22:27:51 ] >>523 ofstreamの bad()/fail()/good()あたりのメンバ関数で判断できるんじゃないかな。
527 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 22:43:20 ] APIを探してくるしかなさそうだな。
528 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 23:56:33 ] >>523 C++のストリームクラスで例外が投げられるようにするには、 予めメンバ関数exceptionsで例外を投げるよう指定する必要があるよ。
529 名前:523 mailto:sage [2009/08/20(木) 14:19:06 ] レスおそくなりすみません。 一応解決しました、ブロックが全て埋まりますが、 >>526 のfail()で判定できました。 ありがとうございました。
530 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 18:46:59 ] メンバ関数の名前ってインスタンスが主語になるように名付けたほうがいいですか?
531 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 20:10:13 ] 大抵そうじゃない?
532 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 20:18:46 ] >>530 is_invalid() とかね。 むしろそうじゃないのってなに?
533 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 20:36:17 ] getter/setterとしてのgetName()は、 インスタンスを主語にするんなら、returnName()じゃね?
534 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 21:01:57 ] >>533 あーなるほど。
535 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 21:50:52 ] itsName()
536 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 23:50:26 ] >>533 インスタンスに対する命令語だから、Set / Get でいいのでは? そうなるとこの場合、主語は無しだけど。 protected / private メンバ関数だと自動詞、 public メンバ関数だと他動詞になりやすくない?
537 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 23:58:53 ] >>536 命令だとしてもインスタンスに対してGetってのは やっぱおかしくない? ちなみに英語では命令文の主語は通例省略されるだけでありyouだ。 とりあえず標準C++で考えて見ると C++文字列(std::string) ttp://www.cppll.jp/cppreference/cppstring.html C++ ベクタ(std::vector) ttp://www.cppll.jp/cppreference/cppvector.html 例が悪い気がしてきた(笑)
538 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 00:17:06 ] イテレータが分からなかった時の begin()とかend()とかの怖さといったら。
539 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 02:53:16 ] C++の設計について質問です。 たとえば、ゲームの当たり判定を計算する関数郡を内包した「当たり判定計算クラス」を作り、 その計算クラスを扱う「当たり判定制御クラス」を作ったとして、 当たり判定制御クラスに計算クラスのオブジェクトアドレスを渡す際に、 生成もすべて任せるべきでしょうか? それとも、生成はまた別のクラスで行い、その後に渡すべきですか? どうも調べていると、「生成は別にすべき」とよく目にするのですが、 この場合、「計算クラス」を使うのは「制御クラス」以外にありえず、 いちいち別で生成するメリットが見出せません。 オブジェクトを生成するファクトリクラスなる概念が出てくるのですが、 これというのは自機や敵機という具体的なオブジェクト以外にも、 こういった計算クラスのオブジェクトの生成も担うべきなのでしょうか
540 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 03:17:07 ] >計算クラスのオブジェクトアドレスを渡す際に、生成 何を生成?
541 名前:539 mailto:sage [2009/08/21(金) 05:09:32 ] 説明不足でした、すみません CAtari* a; ←アドレスなので宣言の時点では生成されていない a = new CAtari( 引数 ); // コンストラクタを呼び出してオブジェクト生成 ↑これを、制御クラスで行うか、生成クラスを作って行うか? 制御クラスで行う場合、 CControlAtari* b; b = new CControlAtari( a, 他引数 ); // コンストラクタに計算クラスオブジェクトを渡す ↑このようにして、bのコンストラクタでaの生成を行います aの解放もbのデストラクタで行います
542 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 08:58:05 ] 特別な理由でもない限りオブジェクトファクトリー使う必要はないよ ただ、newしてないポインタを渡すぐらいなら 呼び元でnewしたほうがいいのでは
543 名前:デフォルトの名無しさん [2009/08/21(金) 09:03:57 ] どうしたらここで言ってることが理解できるようになりますか?
544 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 09:21:39 ] コードを沢山書いて、人のコードも沢山読んで、 んで頑張る。
545 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 09:43:44 ] 当たり判定なんて座標渡して結果を受け取るだけでいいんじゃないのか?
546 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 12:32:25 ] private:int m_xがあるとして get_x()よりpublic:const int& xのほうがクライアントコードも短いしいいんじゃないですか?
547 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 12:46:48 ] それするならpublic: int xでいいじゃない
548 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 12:57:07 ] >>546 const_castで値が変更できそうなのは見なかったことにしても メモリの無駄じゃないかな
549 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 13:35:25 ] 実行中に自身のクラス名(C++の)を取得する簡単な方法ってある?
550 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 13:39:28 ] typeid(*this).name()
551 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 13:41:00 ] template<int i> 〜〜 ここでi=1〜8までならコンパイル可能 それ以外だとエラー(できればメッセージつきで) という具合にできますか?
552 名前:549 mailto:sage [2009/08/21(金) 13:50:47 ] >>550 ありがとう。
553 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 13:58:23 ] >>551 boost::mplとかテンプレートメタプログラミングとかBOOST_STATIC_ASSERTで検索。
554 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 14:16:09 ] >>551 #include <boost/mpl/int.hpp> #include <boost/mpl/and.hpp> #include <boost/mpl/assert.hpp> #include <boost/mpl/comparison.hpp> namespace mpl = boost::mpl; template <int X> struct S { BOOST_MPL_ASSERT_MSG ((mpl::and_< mpl::less_equal< mpl::int_<1>, mpl::int_<X> >, mpl::greater_equal< mpl::int_<X>, mpl::int_<8> > >::value), X_SHOULD_BE_GE_1_AND_LE_8, (mpl::int_<X>)); }; int main() { // S<9> s9; // S<8> s8; S<0> s0; return 0; } ASSERT_MSGがそのものズバリですな 最後の引数に任意の型を放り込めるんで、 型タプル(?)と併用して複数の型を一括inspectとかお手のものです
555 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 15:18:43 ] テンプレートメタプログラミングって 本当に使える人って天才だと思うんだけど。 すごくね? 俺だったら気が狂いそう。
556 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 15:44:25 ] シングルトンって継承しない前提のものなの?
557 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 20:19:35 ] >>539 別にするべきって言うか、別にしないと当たり判定クラスが 何のクラスか分からなくなってくると思うよ。 当たり判定クラスしかオブジェクト持ってないと たとえば、自キャラの入力受付とか、敵キャラの生成・死亡管理とかも 当たり判定クラスでやらざるを得なくなる。
558 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 20:31:02 ] >>557 え? 入力受付オブジェクトとか、敵キャラオブジェクトをどこかで持てばいいだけじゃないの? 当たり判定オブジェクトが入力受付オブジェクトとか、敵キャラオブジェクトを持つ意味ないでしょ?
559 名前:557 mailto:sage [2009/08/21(金) 20:49:28 ] あー、ごめん。完全に勘違いしてた。 自機、敵機のオブジェクトのことだと思ってた。 計算クラスと制御クラスの違いが良く分からん。 計算クラスは関数オブジェクトか何かか? だとすれば計算クラスは別の生成で良いんじゃない? 計算クラスの関数そのモノを継承して処理方法かえれるし。 当たり判定による難易度調整もできるんでない?
560 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 21:17:01 ] メディエータにcreateHogeColleagueみたいなメソッドを作るべきかどうかってことなら それよりファクトリクラスをほかに作って、そのインスタンスをメディエータにもたせればいいんじゃないかな
561 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 21:50:14 ] なるほど。生成を別にしとけば、処理のさし替えをする際に 生成クラスにだけ注目できるメリットがありますね
562 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 22:54:54 ] www1.axfc.net/uploader/File/so/29467.txt こういうことって安全なの?
563 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 23:05:55 ] 大丈夫だよ。 #include っていうのは単にそこに文字列が展開されるだけだから IntListクラスの宣言 IntListクラスの利用 IntListクラスの定義 っていう順番になってるだけ。
564 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 21:12:28 ] staticメンバ変数は静的メンバ変数と言いますが、 constメンバ変数は何メンバ変数と言えばよろしいでしょうか?
565 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 21:31:56 ] 白米を指して麦の種類を聞いているみたいな
566 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 21:40:18 ] >>565 ?
567 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 21:54:01 ] “変”数
568 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 22:41:21 ] 変なの
569 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 00:25:11 ] 仮に const を定数メンバ変数などと名前をつけたとして では static const なメンバ変数はなんと呼べばいいのか。 それはつまり性的定子メンバであり 愛のコリーダである、と。
570 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 00:29:16 ] 今作っているプログラムからffmpegを呼び出したいのですが なんてググればいいですか?
571 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 00:32:29 ] system
572 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 01:10:51 ] どうもです
573 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 02:23:05 ] ShellExecuteEx()の方がいいだろ
574 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 02:37:30 ] なにその非標準関数。
575 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 06:52:17 ] >>573 すげー環境依存w まあsystemも同じようなものか。
576 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 11:59:27 ] template<class T> class C { }; template<> class C<int> { void F() { } }; としたときC<int>::F()でint直記述ではなくTの値を使いたいのですが、方法はありますでしょうか? よろしくお願いします
577 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 12:24:16 ] typedef int T;
578 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 14:23:34 ] 特殊化しといてT使いたいとか意味がわからんですよ
579 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 14:37:37 ] 興味のない方はすみません(スルーお願いします。) 新しくコンテストを来年開きたいと思っています プログラマー(ゲーム・ツール・)の方は pc12.2ch.net/test/read.cgi/tech/1221701297/l50 のスレに来てもらえるとうれしいです。 運営も募集しています。 ↓のような感じでコンテストを開始する予定です。 219.113.110.143/
580 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 17:50:57 ] template<typename T>void F(){} template<typename T>class C{template<>friend void F<T>();}; template<>class C<int>{template<typename T>friend void F();}; みたいな事したいって話?
581 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 19:31:36 ] クラスAのインスタンスの参照をもっているクラスBのインスタンスが複数あるとき Aの寿命がすべてのBより長いことを保障したい shared_ptr以外にいい方法はありますか
582 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 21:18:06 ] >>581 なぜshared_ptrじゃ不満なのだい?
583 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 22:06:32 ] >>578 複数箇所に同じ定数値を記述する手間を省きたかったので >>580 目的としてはそれに近いですがfriendは使いたくないです アクセスする方法はなさそうですね、ありがとうございました
584 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 18:00:06 ] 32ビットマシンでコンパイルしたバイナリは16 64ビットマシンだと動かないんですか?
585 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 18:16:06 ] 動くか動かないかは、コンパイルしたマシンで決まるわけではありません
586 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 21:53:02 ] >>581 スタティックに保障したいということならば、構造化を考えればいい。 スコープの外側で宣言した変数の参照をスコープ内だけで使用するのであれば 寿命の関係はスコープの外側>スコープの内側になる。C++の参照はこれに則っている。
587 名前:デフォルトの名無しさん [2009/08/25(火) 23:43:19 ] 質問っす double d; 〜dを使った計算〜 int i = (int)(d * 32767.0); てな計算があったんですけどこれの意味わかる方いらっしゃらないでしょうか? 32767という数字からしてただのかけ算じゃない気がするのです。
588 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 23:50:06 ] www.google.co.jp/search?q=32767.0 でパッと眺めて使われているのはRAND_MAX関係での割り算と あとは座標関係が多いようだが、さて。
589 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 23:52:49 ] >>587 その行だけ見たら「ただのかけ算」としか言いようがないぞ。
590 名前:デフォルトの名無しさん [2009/08/26(水) 00:09:11 ] 何かイデオムでもあるのかと思ったのですがそういう訳でもないみたいですね もう少し自力で調べてみます
591 名前:デフォルトの名無しさん [2009/08/26(水) 01:28:09 ] 文字変数aに『b』という文字、文字変数bに『c』という文字を代入して、変数aとcを使って、『db』と出力するプログラムを作成せよ #include<iostream> using namespace std; int main() { char a = 'b'; char c = 'd'; cout << "db" << '\n'; return 0; } この問題これじゃダメなんですか?
592 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 01:45:18 ] g++先生に聞いてみたら、 > db.cpp: In function ‘int main()’: > db.cpp:6: warning: unused variable ‘a’ > db.cpp:7: warning: unused variable ‘c’ unusedだって。
593 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 09:25:46 ] >>591 #include <iostream> int main() { char a = 'b'; char c = 'd'; std::cout << char(a + 2) << char(c - 2) << std::endl; return 0; }
594 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 10:58:16 ] >>591 つ[変数aとcを使って]
595 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 11:08:55 ] > 文字変数bに『c』という文字を代入 これが > 文字変数cに『d』という文字を代入 の誤記として #include<iostream> using namespace std; int main() { char a char c; a = 'b'; c = 'd'; cout << "db" << '\n'; return 0; } とすればどうだろうか
596 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 11:52:14 ] >文字変数aに『b』という文字、文字変数bに『c』という文字を代入して、 ふんふん。 >変数aとcを使って、 あれcどっから出てきてんねん。 >『db』と出力するプログラムを作成せよ おいぃぃぃーーー! という突っ込み待ち問題w
597 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 12:45:53 ] class foo{public:typedef shared_ptr<foo> sp;} typedef shared_ptr<foo> spfoo; どっちがいい?
598 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 18:39:31 ] namespace使おうぜ
599 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 19:37:45 ] namespaceとtypedefが関数内で使えるなんて おじさん知らなかったよ
600 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 22:14:02 ] int main { namespace A { enum U { a, b, c }; } } ってやったらエラーでたよ?
601 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 22:29:31 ] そりゃ出るだろ
602 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 22:33:50 ] >>599 が「namespaceは関数内で使える」って言ってるのに main関数内では使えないなんて!
603 名前:デフォルトの名無しさん [2009/08/26(水) 23:48:29 ] >>595 ありがとうございます。つまり、>>594 さんが言ってるのと合わせると、aとcっていうのを変数である、としてから、 作るって事なんでしょうか?
604 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 00:17:26 ] 「何か質問してください」って泣いて頼むんだったら質問してやってもいいよ( ・ω・)y─┛〜〜
605 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 00:24:55 ] 消えてください(´;ω;`)
606 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 00:58:12 ] 関数の引数で要素数の分からない二次元配列を受け取るにはどうすればいいですか? 決まった要素数でなく、様々な要素数の二次元配列に対応させたいんですが
607 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 01:03:30 ] template<typename T,size_t T0,sizet T1>T func(T x[T0][T1]);
608 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 01:19:04 ] ごめんなさいCなんでテンプレートなしで
609 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 01:39:19 ] タスクシステムってようはコマンドパターンのリストみたいなもん?
610 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 02:27:50 ] 配列とSTLリストについての質問です。 配列を配列のままアクセスする場合と、ポインタ型のリストに入れてアクセスする場合 かなりの差が出てしまうのでしょうか? <具体例> あるクラス Aがあるとします。 A a[1000]; //A型の配列a list<A*> list; //Aのポインタ型リスト list と配列とリストを作り、listには配列aを1000個すべて入れていきます。(順序は関係なく) 配列aとリストlistをそれぞれ始めから終わりまでアクセスする。
611 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 02:30:34 ] 日本語が不十分でした。 かなりの差が出てしまうのでしょうか? ↓ かなり速度において差が出てしまうのでしょうか? 追記:低スペックにおいての場合です。
612 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 03:40:15 ] 実際にやってみて比較すればいいだけじゃん。
613 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 06:46:01 ] >>610 その単純な使い方なら、配列のほうが早いだろう。 しかし、実際に使うときは、使い方と処理方法により変わる。 いわゆる、適材適所だ。
614 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 11:47:43 ] >>606 せめて C FAQ くらい読もうか。 ttp://www.kouno.jp/home/c_faq/c6.html#19
615 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 12:08:51 ] 先に書き込まれていたでござる typedef unsigned long int size_t; #if __STDC_VERSION__ == 199901L int do_something_array(size_t row, size_t column, int array[][column]) { for ( size_t i = 0; i < row; ++i ) for ( size_t j = 0; j < column; ++j ) (void)array[i][j]; return 0; } #else int do_something_array(size_t row, size_t column, void *array) { int *ary = array; size_t i, j; for ( i = 0; i < row; ++i ) for ( j = 0; j < column; ++j ) (void)ary[i*column + j]; return 0; } #endif /* __STDC_VERSION__ == 199901L */ #define numberof(a) (sizeof(a)/sizeof(a[0])) int main(void) { int array[][3] = { {1, 2, 3}, {4, 5, 6} }; do_something_array(numberof(array), numberof(array[0]), array); return 0; } 行数詰めたのでめちゃくちゃ見にくい
616 名前:610 mailto:sage [2009/08/27(木) 12:25:36 ] >>612 比較してみたのですが、かなりの差が出てしまい… (iが1000ほどで 配列が1ms、リストが9msほど) どこか間違いでもあるのかと疑っていましたので… >>613 具体的には a[i].Exec などのように同じ処理をさせるのです。 配列、リスト、共に順序に意味など持たず できるだけ処理速度(始めから最後まで)を重視したいと思っています。 また、頻繁にアクセスさせます(ゲームなので16msに一度程度) このような単純な場合では配列の方が適切なのでしょうか? for(int i=0;i<1000;){ a[i].Exec; }
617 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 12:29:28 ] >>616 本当はlistじゃなくてvectorを使うべきなんじゃないの?
618 名前:610 mailto:sage [2009/08/27(木) 12:59:54 ] >>617 Vectorも一度考えたのですが、まだ検証してみてはいません。 listで実装してしようと思った理由は、サンプルでそのような処理を行っていたためです。 (要素数の少ない処理でしたので差は体感できなかったのです) >>610 などの例では要素数が一定なのですが、 配列ではflagでExec()を実行するか否かを管理、リストでは実行するか否かを EnableListとDisableList間で追加削除のやり取りをして、管理しています。 list<A*> EnableList; //実行したい配列のポインタのリスト list<A*> DisableList; //実行したくない配列のポインタのリスト Vectorが静的配列と同じくらいの処理速度でアクセスできれば この処理について(追加削除などもあるので)適切だと思うのですが… 試していませんので分からない状態です。
619 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 17:48:18 ] constつきのメンバー関数への関数ポインタってどう宣言するんでしょうか?
620 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 17:49:29 ] すいません自己解決しました
621 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 18:52:55 ] 個数が分かってるならリザーブしとけば十分速いんでないの?
622 名前:610 mailto:sage [2009/08/27(木) 22:27:21 ] Vectorで試してみました。 アクセスするだけならば、かなり早かったのですが 削除のために、iteratorをインクリメントしたりすると負荷が大きいみたいです・・・ iterator絡みの処理は負荷が高いんですね・・・初めて知りました。 >>621 リザーブすれば、速かったです。 ただ、削除・追加を行うには負荷が大きいようで この事を考えると静的配列の方がいいのかなと・・・
623 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 22:37:42 ] >>610 もうなでもいいから静的配列でやれ
624 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 23:13:23 ] VC++ならvectorのiteratorはポインタ実装じゃなかったっけ debugでやってないか?
625 名前:610 mailto:sage [2009/08/27(木) 23:24:20 ] >>624 >VC++ならvectorのiteratorはポインタ実装じゃなかったっけ VC++ですが、勉強不足で理解できませんorz 削除は、iteratorが指しているものしかできないようなのでインクリメントしてました。 debugでやってます。Releaseとの違いがよくわからず、ずっとdebugでやってきているのですが 処理速度などの違いがでるものなのですか?
626 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 23:30:20 ] debugモードの時のSTLはエラーチェックがかかりまくるので相当遅い releaseにするとコンパイル結果がiterator使ったときとポインタ使ったときで同じになる まあ、なんだ、やってみろ そしてEffectiveSTLでも読んでろ
627 名前:610 mailto:sage [2009/08/27(木) 23:38:06 ] >>626 やってきました。吊ってきますorz でも、こんな恥ずかしい事を早めに教えてもらって助かりました。リアルじゃなくてよかった・・・ EffectiveSTL買って読んでみます。
628 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 02:26:31 ] なにこの<int>とかいうやつ。 適当に自前でリスト作って動かしたら速かったので変えたよ! と、いう事態を何度か目の当たりにしたわ
629 名前:デフォルトの名無しさん [2009/08/28(金) 03:05:28 ] 上底を入力してください(単位cm) 3 下底を入力してください(単位cm) 4 高さを入力してください(単位cm) 5.0 台形の面積は17.5平方センチです こんな感じのプログラムを作りたいんですが、 #include <iostream> using namespace std; int main() { int input1,input2,input3; cout << "上底(cm)を入力してください\n"; cin >> input1; cout << "下底(cm)を入力してください\n"; cin >> input2; cout << "高さ(cm)を入力してください\n"; cin >> input3; return 0; } cin >> input3;から下が分かりません。
630 名前:デフォルトの名無しさん [2009/08/28(金) 03:19:06 ] 1つはfloatにするの忘れました。すみません
631 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 03:43:27 ] ほー、台形の面積の求め方というのは、ゆとり教育と関係があったのか。 www.google.co.jp/search?q=%91%E4%8C%60%82%CC%96%CA%90%CF
632 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 19:35:59 ] >>587 固定小数点にしたかったんじゃないの?
633 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 19:49:13 ] >>632 俺もそれは思ったけどやるなら32768じゃない? 32767だとどうなるんだろ・・・
634 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 20:49:40 ] >>633 ここのベクトル演算のヨタ話みたいなことじゃない? www.flightinfo.jp/tmurakam/scatut2/fdinmen.html
635 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 23:58:08 ] #if PROTOTYPES #define P(p) p #else #define P(p) () #endif int func P((int x, int y)); こんな気持ち悪いプリプロセッサを見つけたんですが、 これは何事でしょうか?
636 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 00:01:06 ] プリプロセッサを見つけたのかよ
637 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 00:22:15 ] >>635 ヘッダファイル見たことないのか? 見れば、似たようなものがあちこちで使われだろう ANSI-C形式のプロトタイプ宣言をサポートしてないCコンパイラのため
638 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 01:26:49 ] int x = 3; int* x = new int(3); ってさ後者がヒープ領域で、前者はどこに領域確保されてるの? 似たような質問で クラスのオブジェクトの宣言で(仮にStudentというクラスにnameというメンバがあったとして) Student sato("佐藤"); Student* sato = new Student("佐藤"); ってできるけど、これってどう使い分けるの? メンバにアクセスするとき 前者は sato.name ってできるけど 後者は (*sato).name or sato ->name じゃなきゃできないらしい本読む限り。 視覚的に前者の「sato.name」の方がわかりやすいんだけど。使い分けを教えてください。 よろしくお願いします。
639 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 01:34:33 ] >>638 ヒープを知ってるならスタックを知ってても良さそうにおもうけど、スタック領域。 newはヒープ領域に確保、単なる宣言はスタック領域に確保
640 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 01:36:09 ] スタックには置きたくなく、どうしてもアロー演算子がいやな場合はtypedefまたはエイリアスを作ればよいかな
641 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 01:37:17 ] typedefうそでした!
642 名前:デフォルトの名無しさん [2009/08/29(土) 01:59:30 ] >>638 Studentのインスタンスを不定個作りたいときは後者じゃないと。
643 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 10:56:55 ] みなさんありがとう。 >>642 どういうこと? Student型の配列として扱い Student* satous[] = {new Student("佐藤一郎") , new Student("佐藤次郎") }; ってやるためということ?
644 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 11:07:59 ] >>638 インスタンスの寿命で考えると分かる。 { Student sato("佐藤"); //ここでインスタンスが作られる。 } //ここでインスタンスが自動的に消滅する。 Student* sato; { sato = new Student("佐藤");//ここでインスタンスが作られる }//ここではインスタンスは消滅されない。 delete sato; //ここでインスタンスを消滅させる。
645 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 11:15:33 ] >>643 インスタンスを不定個作るということは、インスタンスを作る時と削除する時を コンパイル時ではなく実行時に決めるから。
646 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 11:31:41 ] すみません 演算子のオーバーロードをした場合(例えば、operator()(int a)みたいな感じで) クラス内部でアクセスするときは、operator()(10)とするのが良いのでしょうか? それとも、(*this)(10)とするのが良いのでしょうか? 非常にくだらない質問だとは思いますが、よろしくお願いします
647 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 14:37:45 ] (*this)は式のままの書式で書けるメリットがある。 でも()は関数の形式だからどっちで書いても大差がないね。 thisを使うと最適化にはどういう影響が出るのかな?知ってる人教えて!
648 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 15:20:47 ] どっちでも変わらんように思うけど、識者に任せる
649 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 06:26:10 ] >>634 そういうことならありえるね 参考になったわありがとう
650 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 08:42:11 ] C++でJavaみたいにfinalメソッドを作ることはできませんか?
651 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 11:51:27 ] >>650 virtualをつけなかったら、finalになるんじゃないの?
652 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 11:54:12 ] 継承エラーなクラスを作ることはできますよ
653 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 12:38:26 ] >>651-652 親クラスのポインタに子クラスを代入してるときにvirtualつけてないメンバ関数を呼べば 確かにそうなるかも知れないけど。 そうじゃなくて継承はさせたいけど特定のメンバ関数は上書きして欲しくない。 こういうのはC++では無理っぽいですか?
654 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 12:39:31 ] Boostにそれっぽいのはあったような
655 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 14:15:46 ] >>651 お・・・おまw 知ったかぶりするなよ。
656 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 16:30:44 ] >>647-648 ありがとう 取りあえずは見た目優先でも問題なしと言うことでいいんすかね?
657 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 18:11:22 ] 変数を使う直前で宣言した場合よりも、スコープの先頭で宣言したほうが処理速度が速くなって びっくりしました。 これって一般的なことなんでしょうか? 条件によっては速くなったり遅くなったりするものですか? コンパイラ次第なんでしょうか? 今、使っているコンパイラはVC++コンパイラです。
658 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 18:14:09 ] 一概には言えないが、そんなはずはないはず。 releaseでコンパイルしてCtrl+F5で実行しても?
659 名前:名無しさん@そうだ選挙に行こう [2009/08/30(日) 18:18:18 ] while(true){ ClassA a; } とかやってるんじゃない?
660 名前:657 mailto:sage [2009/08/30(日) 18:30:52 ] >>658 Releaseコンパイルでそうなるんです。(DLLですので、実行時に別のアプリでそれを動かしてます) >>659 いえ、forループには入っていますが、static intやstatic boolです。 クラスや大きな構造体を毎回初期化というようなことではないです。 不思議です^^;
661 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 18:37:27 ] とりあえずコードを(ry
662 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 18:38:54 ] >>660 ちょっとまて、おぬしスタティックと申したか?
663 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 18:59:19 ] 座標について質問です 5*5マスの座標の一行目の一番左を(x1,y1)、右へ行くほど数字を大きくして一番右が(x5,y1) 二行目の一番左が(x1,y2)、一番右が(x5,y2)・・とします そして自分が(x3,y3)にいて、前方を向いていれば 前方に2、左へ1の座標は(x2,y1)になりますが、右を向くと(x5,y2)になり、 後方を向くと(x4,y5)になります 一箇所だけならifやselectで条件分岐させるのですが、量が大きいのです こういう時、この座標はどう計算すればよいのでしょうか?
664 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 19:06:48 ] 三角木馬関数を使いなさい。
665 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 19:16:30 ] >>664 ありがとうございまかす
666 名前:657 mailto:sage [2009/08/30(日) 19:18:44 ] >>661 すみません、ちょっと複雑ですw >>662 あ、はい、staticです・・・(?)
667 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 19:31:56 ] >>663 class Hoge { int x;//位置X int y;//位置Y int x0://向きx int y0;//向きy public: void Hoge() :x(0),y(0) ,x0(1),y0(0) //初期値は右向き { } void forward()//進む { x+=x0;y+=y0; } void right()//右に回転 { int atmp=x0; x0=y0; y0=-atmp; } void left()//左回転 { int atmp=x0; x0=-y0; y0=atmp; } };
668 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 21:07:05 ] Stateパターンの方がよくね?
669 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 21:35:57 ] C#のインデクサと同じことをC++でやるテクニックってありますかね?
670 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 21:39:01 ] operator[]
671 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 21:56:30 ] >>666 ソースを貼れないなら自分で調べるしかない。 該当箇所にブレークポイントを打ってF5。止まったところでALT+8して逆アセンブルを比較する。 処理速度が気になるときは逆アセンブルを見るのが近道
672 名前:663 mailto:sage [2009/08/30(日) 22:25:34 ] >>664 すいません、ダメでした >>663 の前方に2、左に1のy座標を求めるために計算してみました (120*π/180)でラジアンをだし、それを半径の長さ(1^2+2^2=5 ピタゴラスの定理でsqrt(5)) のsqrt(5)で割ってsinを出してみたところうまくいきません。どこが問題なのでしょうか? ↓のコードの結果は0.805573になります #include <iostream> #include <math.h> #define PI 3.14159 using namespace std; int main() { double deg = 120; double rad = (deg * PI / 180.0)/sqrt(5.0); cout <<sin(rad) ; return 0; } >>667 ありがとうございます アクションRPGに導入するとものすごいコードが短縮できました! が、マスメ状ではうまく動きませんでした・・
673 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 22:56:24 ] >>672 高校から数学をやり直せ 中学かもしれん
674 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 23:00:36 ] sin()じゃどうあがいても1を超える事はないだろww
675 名前:663 mailto:sage [2009/08/30(日) 23:12:24 ] すいません、三角関数は当時理解してたつもりでしたがいざ使うとなるとロクに使えませでした おとなしくifで分岐させつつやります ありがとうございました。
676 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 23:14:34 ] >>675 いやまてまて、 三角関数とか忘れるものじゃないだろ。 数学の基礎中の基礎だぞ? 15歳のガキでも(理解しているかどうかは別として)一応ならうんだぞ??
677 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 23:20:33 ] いや公式も覚えてるんですよむしろ忘れるはずも無い 半径が1で 筆記体のsin・cos・tanの頭文字を使って 始点が分母終点が分子 ttp://www1.axfc.net/uploader/Img/so/57580.jpg この覚え方で忘れるはずも無いでしょう ただこれを応用する力がなくなった、のか最初から無かったのか 前者だったはずなんだけどなぁ
678 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 23:26:51 ] 90度ずつしか回転しないうちはif文でいいけど 将来3DCGを使っていろんな方向に微妙に角度を変えるときは必須だよ^^
679 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 23:28:02 ] >>677 >>672 の問題点は、120degがどこから来たかだ。
680 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 00:00:17 ] こんな感じじゃよ。たぶん。これで、いかなる角度への移動も可能。 codepad.org/QASgM33C
681 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 00:08:20 ] ああなんだ回転行列か
682 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 00:13:25 ] >>680 お前何でそんなに優しいんだ! 惚れるぜ
683 名前:657 mailto:sage [2009/08/31(月) 01:48:19 ] >>671 分かりました。 ありがとうございます!
684 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 01:51:57 ] 回天行列です。
685 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 10:07:38 ] そんな行列いやだー
686 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 17:01:07 ] 10年ぐらい前に売られていたバージョンのC言語って今のプログラム組むのに使える? 対応できてるものかい?
687 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 17:15:08 ] C言語は10年前と何も変わってないよ
688 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 17:29:43 ] >>687 分かりました。 では、10年前のVisual C++で色々プログラム組んでみます。 ありがとうございます。
689 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 17:39:22 ] C言語とVisual C++が同じものだと思ってるのか? めでたいやつ
690 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 17:49:23 ] >>689 なんだ? 10年前のVisual C++と今の環境は同じじゃないのか?
691 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 17:58:03 ] こりゃまた、ずれたレスがきたな。日本語でOK な文だが。 まともに翻訳すると。 10年前の 「Visual C++」 と 「今の環境」 は同じか? 対象が違いすぎて俺には答えられないぜw
692 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 18:06:31 ] >>691 答えられないなら書くなよ。 日本語で丁寧に書くと 10年前のVisual C++の環境や扱い方と今のVisual C++の環境や扱い方は、同じじゃないのか? だ。
693 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 18:10:41 ] ちがう
694 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 18:12:04 ] >>692 お前な、自分が間違ってる上に開き直ってえらそうだな、おいw
695 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 18:17:13 ] やっぱりソフトの購入からか。 >>694 、どこが間違ってたんだ?
696 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 18:18:03 ] Cというプログラミング言語自体はそんなに変っちゃいないが、 Visual C++というMS製のアプリケーションは大幅に変わっている
697 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 18:23:10 ] >>696 アプリケーションがかなり変わってるのか、じゃソフトの買い替えからしないとダメだな。 サンクス。
698 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 18:24:52 ] 10年前のVC++で作っても今の環境で動くよ、問題ない しかし最新のVC++は無料版もあるからそっちのがいいと思うんだ
699 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 18:28:51 ] >>698 無料版のVisual C++なんてあるのか。 相当変わってるんだな。 試してみる。 色々ありがとう。
700 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 18:34:46 ] 何にも知らないで何も調べないでプログラムを組むとか早速高いソフトを買うとか 絶対釣りだろ
701 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 18:42:14 ] >>700 10年前にC言語でプログラム組んだことあるし、その当時のプログラムの本は今でもあるよ。 しばらくの間お蔵入りになっててC言語の内容少し忘れてはいるけど。
702 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 18:47:08 ] 10年前のOSで開発するなら、10年前の処理系が最適かも。
703 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 18:53:20 ] >>702 当時のバージョンのソフトがあるから今のPCにインストールして使ってみる。 あと、無料版も試してみる。
704 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 18:54:53 ] DLLでnewする場合はDLLでdeleteしないといけないらしいんですが DLLでfactoryをnewしてそのインスタンスからcreateする場合もやっぱりDLLでdeleteしないとだめですか?
705 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 19:15:39 ] DLLとアプリケーションで、メモリ源が2つあると考えろ。 そして、その2つは扱い方は同じだが、返すべきところが違う。 DLL内のoperator deleteとアプリケーションのoperator delete、 どちらを呼び出して返却すべきかは、自分で考えろ。
706 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 19:47:44 ] メモリはもらったところへ返す DLL側のnewでもらったメモリはDLL側のdeleteへ返す EXE側のnewでもらったメモリはEXE側のdeleteへ返す DLLもEXEもみんな別々にメモリ管理してる (場合がある) から ごっちゃにするとメモリ管理が混乱して落ちる (かもしれない) それはウチで管理してるメモリじゃないぜ、とかそんな感じ EXEもDLLもみんな、使うメモリはどっか一個所で一元管理してやれば済む話なんだが みんな自分勝手だからな
707 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 20:26:35 ] boost::shared_ptrを使うとカスタムデリータが確保した側のdeleteで自動的に開放してくれるから便利。
708 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 21:01:23 ] shared_ptrの類を使うとインスタンス管理で負けた気がする。 全くの個人的な了見で、使う人を批判する気は全くないが。
709 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 21:13:01 ] >>708 そんなこと言っていると 本当にインスタンス管理に(つーか他人の技術に)負けるぞ。 何事も新しいことは受け入れづらいものなのは分かるが。
710 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 21:16:38 ] shared_ptrを普通のポインタみたいに記号ひとつで使えればいいのに。Foo@ foo;とか typedef std::tr1::shared_ptr< foo > sp_foo_t;とかするのめんどくさい
711 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 21:27:12 ] >>708 安心しろ。それは杞憂だ。 shared_ptrを使うには循環参照を避けるクラス設計が必要になる。 それこそがインスタンス管理の勝利ではないか。 一度使い始めると雪崩的に使うようになるから。
712 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 21:29:52 ] >>710 そういうことはC++0xの設計段階で提唱するべきだったな。
713 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 22:49:07 ] >>710 using std::tr1::shared_ptr とすれば楽になる。 C++0xにはtemplate typedefができるらしいから sp<T>にでもtypedefすればいいんじゃないか
714 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 22:59:08 ] using sp = std::tr1::shared_ptr; sp<hoge> sp_hoge; 0xだと↑みたいにできるらしいね。typedefより見やすいし良いと思う
715 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 14:25:43 ] inline int func(int x){ return x * x; } みたいなinline関数があるとすると、 a = func((int)(b - c)); は a = ((int)(b - c)) * ((int)(b - c)); みたいになるんですか? それとも、 int x = (int)(b - c); a = x * x; みたいになるんですか?
716 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 14:40:29 ] 後者 マクロ展開と違って引数は1度しか評価されない
717 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 15:07:27 ] >>716 ありがとうございます。
718 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 17:58:52 ] >>713 彼はそんな程度は知っているだろ、たぶん。 彼が言いたいのはもうもっと言語仕様に 組み込んじゃえよってことじゃねぇか?
719 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 18:01:01 ] >>717 >>716 の言う通り、一度である。 よって、例えばmaxテンプレートとmaxマクロでは max( ++a, b ); がどうなるかが変わってくる。
720 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 18:24:52 ] >>719 715です。 これは確かにどちらなのかによって全然違いますね。
721 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 18:37:59 ] >>720 というかマクロで作ったら未定義の動作だろ。 *未定義の動作=インターネットのニュースグループ、comp.std.cやcomp.lang.cでは、未定義のコードを実行した結果「鼻から悪魔が飛び出しても仕様に反しない」というjoke が流行したことがありました。今でもたまにこのような表現を見ることがあります。 初級C言語Q&A(7) ttp://www.st.rim.or.jp/~phinloda/cqa/cqa7.html
722 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 00:36:29 ] 数字を四捨五入するにはどうすればいいんでしょうか?
723 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 00:38:06 ] JIS, ISO式四捨五入なら専用の関数がいる
724 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 00:40:44 ] 四捨五入の意味を辞書で調べて、その通りにすればいいと思います
725 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 00:51:54 ] CをまともにやらずにC++をやろうとするのは無謀? それなりに努力はするつもりなんだが、どうなんですか?
726 名前:デフォルトの名無しさん [2009/09/02(水) 01:13:18 ] 別にいいと思うよ。 Cでポインタを理解しておけば、C++でポインタを勉強する必要がなくなるとかそんな程度だし。
727 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 01:14:01 ] 先にC++に慣れ切ってしまうと、後からではCではプログラムを組めなくなるんじゃないかという危惧がある ゆとり教育とかいうと聞こえが悪いけど、なんかそんな感じ でもいまどきC++が使えない環境ってのもそうそうないだろうとも思うわけで、 まぁ別にいいんじゃないか 無謀というほどのことはない むしろSTLとか便利なライブラリのおかげでポインタをやたら使わずに済む分つまづくポイントは減ってるかもしんない
728 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 01:30:28 ] >>726 >>727 返答ありがとうございます
729 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 02:15:29 ] >>725 いやいきなりC++をやる事をオススメする 禿もそう言っているし
730 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 06:50:19 ] >>725 > それなりに努力はするつもりなんだが この覚悟があるならC++で良いと思うよ。
731 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 06:55:07 ] Accelerated C++やC++プライマーを使うと良いでしょう。
732 名前:デフォルトの名無しさん [2009/09/02(水) 12:33:11 ] ビジュアルCとビジュアルCじゃないCはどの程度の違いがありますか?
733 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 13:04:47 ] 「ビジュアルCじゃないC」 とかじゃなくて具体的な製品名をあげてくれ
734 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 13:35:26 ] try catchで配列[]の添え字範囲外の例外をキャッチ出来る? メモリのアクセス違反のキャッチと言うべきかな
735 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 13:42:33 ] >>734 これ? msdn.microsoft.com/ja-jp/library/5z4bw5h5 (VS.80).aspx
736 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 13:50:10 ] >>735 それっぽいけど エラーの種類の判別方法がわからんね 調べてみます
737 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 14:16:12 ] >>733 ずびばせん…… 例えばボーランド?というやつではどういう違いがありますか?
738 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 15:14:59 ] Borland C++Builder と Borland C++Compiler の2種類があるけど・・・ Borland C++Builder と Visual C++ はまったく異なる。 Borland C++Builder は Visual Basic みたいに部品ポトペタで開発していくスタイル。 Visual C++ はエディタでごりごりコードを書く開発スタイル。 Borland C++Compiler と Visual C++ はごりごりコードを書く点では変わらないけれど、 Borland C++Compiler には開発環境が付いておらず、 普通のテキストエディタ(メモ帳とか)でコードを書き、コマンドラインからコンパイラを使うことになる。 (いちおうベクターあたりを探せばフリーの開発環境がいくつか見つかる) Visual C++ には豪華な開発環境が付いていて、ボタン一発でコンパイルでき、デバッガも組み込まれている。 ちなみにボーランド(の開発製品群)はエンバカデロに買収されました。 なので、たぶん Embacadero C++Builder とか呼ぶべき。
739 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 15:18:25 ] >>738 で、そのコードはCなの?
740 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 15:22:47 ] そもそも Visual C というのは無いから Visual C++ のことだろうと推測した (C#のことだったらすまんね) 説明したのは書いてるとおり Visual C++ とボーランドなんとかというやつの比較
741 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 17:07:20 ] ははあ……なるほど Cプラが使えるのには違いはないんですね!? ありがとうございました!
742 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 21:45:07 ] hoge f(int a, int b, int c) { return hoge(a, b, c); } hoge h(f(1, 2, 3)); これだとコピーコンストラクタが無視されて、あたかも hoge h(1, 2, 3); のような挙動になるのは仕様で決められてる? それともたまたまコンパイラの中の人が親切だっただけで?
743 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 21:57:59 ] >>742 仕様で許可されている。返り血最適化RVOという。 許可されているだけなので最適化されるかどうかは中の人次第。
744 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 22:08:24 ] 下記の書についてです。 (1).ANSI C/C++辞典(ttp://www.amazon.co.jp/exec/obidos/ASIN/4320027973/) (2).新ANSI C言語辞典(ttp://www.amazon.co.jp/exec/obidos/ASIN/4774104329/) CだけでなくC++についても調べたいので(1)は買う予定でいます。 (2)は色々と評判に上がることが多いようなので迷ってるのですが、 ・ (2)は(1)と重複している部分が結構あったりするのでしょうか。 ・ (2)ではC++についてはまったく触れられていないのでしょうか。 ・ 両方とも割と昔の本ですが、仕様の変更などで現在と異なる点はあるのでしょうか。 ご存知の方がいましたら教えていただきたいです。
745 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 22:29:39 ] C++は1998と2003年に改正されてるけど1996年の本でいいの? いいんだ。あ、そう。
746 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 22:54:35 ] 新のつかないほうのANSI C言語辞典を持っているけど、これは今でも使える。 まあ古い本なので、ワイド文字関係と誰も使っていないC99に関する事柄が抜け落ちているけど。 だから、新のほうもおそらくおすすめできると自分は思っている。 ANSI C/C++辞典は分からない。初版は図書館で見たことあるけど、これ3版だからノーコメント。 個人的には、C++の内容を辞典的に網羅するにはページ数が少なすぎるだろうというのが気掛かり。 そのアマゾンによれば590ページらしいが、C言語辞典ですら500ページ近くある。 (初版でもC言語辞典より小さな字で詰めて配置してあったとはいえ)
747 名前:744 mailto:sage [2009/09/03(木) 00:22:24 ] 情報ありがとうございます 最近の本も探してみたのですが、評価が芳しくないものやパッとしないものが多くて… 古い本なので逆に図書館にあるかも知れませんね 近所の図書館をあたってみて、もしあれば中身を確認してみようと思います
748 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 02:00:47 ] 今まで文字列の取り扱いは char * を使ってたのですが、そろそろ汎用性を考えたコードも 意識して書かないといけないかなとか思い始めてます。 ところがなんか TCHAR だの wchar_t だの LPTCSTR だのと色々とあって、どういう時に どれを使えばいいというのが判りません どういう考えで、どういう型を使うのが一般的なのでしょうか
749 名前:デフォルトの名無しさん [2009/09/03(木) 02:38:19 ] char*でおk。
750 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 02:47:38 ] 蒸し返すようだけどGET_SET_ACCESSORって要するに 「今は何もしない素通し処理にしておくけど、将来的に別の処理が入った時に クライアントコードの書き換えが必要になるとまずいからとりあえずアクセサ になってますよ」って意味じゃね? 必要になったら普通に書き直せばいいし、何もしてないです、ってのが一目で 分かるし、悪くないマクロだと思うが。 まぁ俺はマクロ嫌いだから極力使わないんで、これも使わないけど。
751 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 04:09:28 ] ・いつか処理が変わるかもしれないからアクセサは常に作るべき ・次のフェーズで変更されることが分かっているからアクセサを作るべき ・必要になってから作るべき という感じで意見がいつも割れるんだよ
752 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 04:24:39 ] ハイ!先生 「メンバは原則 public しといてゲッタセッタ必要になったら private に異動で十分」派です。
753 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 05:40:12 ] それ呼び出し側のコードが変わるじゃん
754 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 05:51:34 ] で?
755 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 05:54:39 ] >>752 それだとメンバ変数名を変えたくなっても変えられないな。 Get/Setでポリモーフィズムが使えないな。 >>750 単純な代入とかだったらGET_SET_ACCESSORでいいと思うし、 頑なに拒否する人を見て何が悪いのかと思ってたけど、 デバッガで見れないって言うのがね、ちょっと嫌かな。
756 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 06:26:37 ] そうやってアクセサとメンバ名の乖離が起こるわけですね。 ポリモーフィズムが使えないという点は全く理解できないので追加説明をしていただけると助かります。
757 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 06:46:09 ] >>753 変わって何か問題ある?
758 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 07:12:09 ] 別に問題ないよ
759 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 10:22:49 ] 書き換えるのが面倒 プロジェクト内の全ファイルから問題の箇所を一発で全部置換できるエディタを持ってるのなら気にする必要はない
760 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 12:47:14 ] wrproperty使ったほうがクライアントがすっきりうんこ
761 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 15:06:03 ] 汎用的なライブラリでそんな作業しようと思うとぞっとする。 変数書き換えのタイミングも追いづらいし。
762 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 15:10:09 ] a* [2] a[0] = new b[2] これって可能?アクセス方法ってどうやるの?
763 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 15:31:20 ] 不可能
764 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 17:50:35 ] プラスとマイナスをひっくりかえす関数ってありますか? 例えば5なら-5に、-9なら9に変えてくれる関数です
765 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 17:55:16 ] 関数にするまでもない a = -b; とかで十分
766 名前:764 mailto:sage [2009/09/03(木) 18:00:34 ] 本当だ、できました ご親切にありがとうございました
767 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 19:31:38 ] 1.f←これってfloatとして扱うってことですよね? いま呼んでいる本に double r = srcR * srcA + ( 1.f - srcA ) * dstR; というコードがあるんですが 「1.0」(double型)じゃなくて「1.f」(float型)をつかう意味ってありますか? srcR、srcA、dstR、はどれもdouble型です。
768 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 19:46:22 ] >>767 ありません。
769 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 20:02:16 ] もともと全部floatで書いていたコードを何かの理由でdoubleに直したときに そこだけ修正し忘れた、とか
770 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 20:06:08 ] >>768-769 わざわざfloatにしてるから 何かしらメリットがあると思ったんですが 何もないんですね。 ありがとうございます。
771 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 20:19:58 ] >>767 何か勘違いしてそうだから念のためにいっておくと、 double の 1.0 は 1. と書くこともできる float の 1.0f は 1.f と書くこともできる
772 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 20:23:02 ] shared_ptrに確保されたインスタンスがあったとして そいつのweak_ptrを返すメンバ関数とかってどうやって実装してるの?
773 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 20:26:22 ] >>756 変数がpublicだったらアクセサを経由した取得にならないからだろ。
774 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 20:58:14 ] >>771 0付けなくても良かったんですね ありがとうございます
775 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 21:13:34 ] >>772 shared_ptrとweak_ptrはインスタンスを直接保持するのではなく、インスタンスを管理するオブジェクトを経由して保持している。 weak_ptrは管理オブジェクトを参照すればインスタンスが有効かどうかが分かる。
776 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 22:08:14 ] wktk_ptr kwsk_ptr sneg_ptr
777 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 22:08:39 ] いや、なんていうか sp->getThisWeakPtr(); みたいなことしたいんですけど無理なんですかね?
778 名前:777 mailto:sage [2009/09/03(木) 22:46:10 ] あ、自己解決したわ
779 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 23:32:43 ] 使いたくもない敬語を無理に使ってるってことがよく分かる
780 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 02:37:31 ] ?
781 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 13:18:09 ] 1: char a[20]; 2: char a[20]={0}; 3: char *a = new char[20]; これらのうちでは 動作が軽い順で言うとどうなりますでしょうか?
782 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 13:40:41 ] 1が最も軽く、3が恐らく最も重い
783 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 14:00:22 ] 3は delete[]a;もセットで考えないといけない。
784 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 14:18:13 ] >>782 なるほど。 1と2では、 初期化する場合としない場合とでやはり速度差があるのですね。 >>783 ありがとうございます。そうすると3は重そうですね。 ありがとうございました。
785 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 14:20:44 ] 1.のコストは0なのだ。
786 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 15:20:48 ] C++のisoが定めた規格が 無償で(英語でもいいので)見られる サイトを教えていただけますでしょうか?
787 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 15:39:02 ] C++のqueueについてなんですが、 queueで作ったデータ列を配列みたいに見るってできないんでしょうか? front()で頭を見る以外の方法が分かりません…
788 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 16:00:37 ] >>787 配列のように扱えないのがstd::queueのメリット。 配列のように使えるキューが欲しいならstd::dequeを使う。
789 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 16:02:12 ] >>786 iso 14882 2003 pdf - Google Search www.google.com/search?name=f&hl=en&q=iso+14882+2003+pdf
790 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 16:04:58 ] >786 C++についてはC言語ほど詳しいわけではないけど ドラフトなら無償で手に入れることができたはずだったんだけど、なんか本家死亡中? 規格書の正式名称をどうたらこうたらで手に入れることができる
791 名前:786 mailto:sage [2009/09/04(金) 16:08:13 ] >>789-790 丁寧にありがとうございました。 助かりました。
792 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 16:14:52 ] >>788 分かりました。どうもです
793 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 17:11:55 ] 全然別人ですが、 C99の規格は英語でいいのでどこかで手に入りませんか? ググろうにも何でググればいいのか悩みます。
794 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 17:17:06 ] JISの規格票じゃだめなのか?
795 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 17:34:38 ] JISの規格は閲覧するのにとても苦労するので。 (標準のpdfリーダがadobeじゃ無いためです。)
796 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 17:50:34 ] n1124.pdfとか
797 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 17:55:47 ] >796 それはC0x Draft, N1124, 6 May 2005だな
798 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 17:57:26 ] どの版がいいの
799 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 18:09:13 ] ええと、一番普遍的な版がいいのですが。 そんな最先端のプログラミング技法には深入りするつもりもないので。
800 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 18:27:02 ] テンプラメタプログラミングなんてやってなんか得したことあった?
801 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 18:41:44 ] 知的好奇心が満たされるw
802 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 18:49:15 ] >>800 似たような重複コードを書かなくてすむ用になる。
803 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 19:05:32 ] (プラシーボで)実行速度が速くなった
804 名前:デフォルトの名無しさん [2009/09/04(金) 19:48:32 ] C++でスレッドをやってみたら思いのほか簡単にできた。 それでも複数の値渡しはいちいち構造体を定義しないといけないなんてどうしてこんな回りくどいやり方でないといけないのか もっとすっきりしたやり方考えろよ
805 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 19:50:41 ] 自分で好きなように作ればいいじゃないか?
806 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 21:25:36 ] >>804 スレッド開始時の関数に引数を渡すときのことを言っているなら、boost::threadはどう? bindと組み合わせれば何引数でもいけるよ。 もちろん、それ以外のAPIでもbind使えるようにできるけど。
807 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 23:34:38 ] テンプレートメタプログラミングは定数のコレクションを生成するとき便利だよ。 その数が万単位になると劇的に速度が変わる。
808 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 23:37:14 ] テンプレートメタプログラミングは 天才がライブラリを作るときに便利だと思うよ。 凡人が挑戦すると死亡するだけ。
809 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 05:58:07 ] ちょっとやってみたけどコードがぐちょんぐちょんになった
810 名前:デフォルトの名無しさん [2009/09/05(土) 15:50:47 ] C言語における、ダブルクォートで囲んだ文字列と、 シングルクォートで囲んだ文字列は、どういう違いがあるのでしょうか? 明確に違って、ダブルクォートで囲んだほうは文字列の最後に何か追加されたような気がする、まではおぼえているのですが… どなたかご教授いただけませんでしょうか
811 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 15:52:34 ] >>810 シングルクォートで囲んだ文字列 の意味が分からん。 そんなもの存在しない。
812 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 15:56:35 ] >>811 ごめんなさい 文字列という言葉ではおかしかったかもしれません っていうか、シングルクォートで囲んだものは文字列ではなくて、文字、でしたっけ "aaa" == 'aaa' ではないことは覚えているのですが あえて "aaa"をあえてシングルクォートで囲んで表現したらどう表記するのでしょう、といった質問です
813 名前:811 mailto:sage [2009/09/05(土) 15:58:56 ] >>812 "aaa" -> 言語仕様として存在する 'aaa' -> 言語仕様として存在しない というこれ以上ないほどの違いがあるぞ。
814 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 15:59:51 ] つーか、どんなC使ってるのか知らんが、 'aaa' はCでは出来ないよ。
815 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 15:59:52 ] { 'a', 'a', 'a', '\0' } こんな感じか?
816 名前:811 mailto:sage [2009/09/05(土) 16:01:13 ] それとも "aaa" -> C/C++ではcharないしconst char型の配列型で、その数は4である。(終端にヌル文字が付く。) "a" -> C/C++ではcharないしconst char型の配列型で、その数は2である。(終端にヌル文字が付く。) 'a' -> const char型の文字型変数。 であることを言いたいのか?
817 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 16:01:55 ] char *p = malloc(3); p[0] = p[1] = p[2] = 'a';
818 名前:810 mailto:sage [2009/09/05(土) 16:02:24 ] 過去ログを読み直していたらこんなコードにぶつかったので質問した次第です 文字とか文字列とかそういう問題で捉えたのがいけなかったんですかね 624 :デフォルトの名無しさん[sage]:2008/01/30(水) 00:58:29 #include <iostream> int main(void) { const int max_str = 50 + 1; char str1[max_str], str2[max_str]; std::cout << "数値a入力>"; std::cin >> str1; std::cout << "数値b入力>"; std::cin >> str2; int len1, len2; for( len1 = 0; len1 < max_str; ++len1 ){ if( str1[len1] == '\0' ) break; } for( len2 = 0; len2 < max_str; ++len2 ){ if( str2[len2] == '\0' ) break; }
819 名前:810 mailto:sage [2009/09/05(土) 16:05:44 ] >>816 ヌル文字! と 文字数! それです、私が思い出したかったと思われるキーワードはそれです! あとは自力で調べられそうです ありがとうございましたー
820 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 16:07:04 ] たぶんシングルクォートの文字列は char foo[] = {'f', 'o', 'o', '\0'}; /* '\0'は'\000'または'\x00'などと同じnull character(JISではNULと表記される)を表す */ だと思う、シングルクォートは文字定数を表記するときによく使われる、そのほかの目的でも使うことはある ダブルクォートの例は char bar[] = "bar"; /* {"baz"};とかくこともできる */ char *baz = "baz"; ダブルクォートで囲んだ場合、文字列リテラル(文字列定数)と呼ばれる この場合、コンパイラは気を利かせてnull characterを付けてくれる したがって、sizeof(bar)は4となる しかしながら char hog[3] = "hog"; の場合、コンパイラは気を利かせてnull characterを追加しない、つまり char hog[] = {'h', 'o', 'g'}; /* char hog[3] でもよい*/ とした場合と同じ結果となる と長々書いているうちに解決していたでござるの巻
821 名前:810 mailto:sage [2009/09/05(土) 16:08:38 ] >>820 ありがとうありがとう 大感謝です
822 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 16:22:47 ] どうでもいいけど、 結局何を疑問に思っていてどう解決したのかさっぱりわからん。
823 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 16:30:04 ] 要はかなりのうろ覚えだからどう検索すりゃいいのかも分からなかったんだろ。
824 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 17:20:19 ] >>820 char *baz の sizeof は勘違いしたらいかんよ。
825 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 17:28:41 ] >824 例が悪かったか ほとんどの環境ではsizeof(char *)も4だったね
826 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 17:33:44 ] 記号関係で検索しようと思ったら確かに詰むわな。どうにかならんかな。
827 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 17:46:40 ] >>825 例えが悪いっていうか、同列に並べたら混同しちゃうだろw char bar[] = "bar"; とchar *baz = "baz"; じゃ意味が全然違うのに。
828 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 17:49:24 ] >>813-814 いや、'aaa'のように中に文字が複数ある場合、その値は処理系定義。 仕様にないとかできないとかはちょっと言い過ぎだと思う。 まあ、実際問題使わないからそういう認識でも構わないと俺も思うけどさ。
829 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 17:52:12 ] シングルクォートの中には文字が一つのはずと理解していたのに '\0'をみて、まるで2つの文字からなる文字列が入っていると勘違いしたんじゃないのだろうか。
830 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 17:56:07 ] VC++は'aa'と二つはできたな。 三つ以上は試したことがない。
831 名前:デフォルトの名無しさん [2009/09/05(土) 17:59:36 ] >>828 マジックナンバー表すのによく使われる。3文字は見たこと無いけど。
832 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 18:01:31 ] >>831 ちょっとマジックナンバーについて簡単に説明してもらえますか?
833 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 18:06:18 ] VC++ならchar c = '??/n';とかできるな
834 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 19:57:38 ] 問題を整理しよう。 ・>833はトライグラフ。 ・シングルクォートで囲える文字数は(トライグラフやエスケープ文字を処理した後の)4文字程度(環境依存)。 ・その場合のエンディアンも環境依存。 ということで宜しいかと。 で、例えばint foo = 'abcd'としてprintf("%d\n", foo)としたときの出力が、所謂マジックナンバー。
835 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 20:06:54 ] 多文字リテラルはC90でもあるだろうに
836 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 21:49:37 ] なんだかんだいって、もう本人は解決しちゃったんだろうぜ。
837 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 22:10:10 ] >>834 もう一度聞くけど、マジックナンバーについて簡単に説明してもらえますか? どうも一般的に使われているものと異なるように思うので。
838 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 22:25:51 ] やだね、こういう言いたいことを裏に覗かせつつ質問する馬鹿って。 >>837 マジックナンバーと呼ばれるものには私の知る限り3種類ある。 ・野球のマジックナンバー。詳細は知らん。 ・コード中に埋め込まれた由来不明の値。何故その数字か判らんが兎に角動くと言う皮肉を込めて、マジックナンバーと呼ぶ。 ・主にバイナリファイルの先頭に置いて、ファイルの種別を明示するために使われるバイト列。或いはそれを数値化したもの。 Unix使いなら/usr/share/file/magic辺りにあるから覗いてみるといい。
839 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 22:29:20 ] 馬鹿とまで言われるとは思っていませんでした。 > ・コード中に埋め込まれた由来不明の値。何故その数字か判らんが兎に角動くと言う皮肉を込めて、マジックナンバーと呼ぶ。 僕もこれだと思っていたのですが、>>834 さんは出力がマジックナンバーといっているので、 いったいどういう事だろうかと思ったんです。
840 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 22:33:47 ] 質問しただけで荒れるってジャスティスののか
841 名前:デフォルトの名無しさん [2009/09/05(土) 22:34:25 ] >>837 en.wikipedia.org/wiki/Magic_number_ (programming) まぁファイルフォーマットとかを直接触らない人には関係ないかもね。
842 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 22:40:05 ] >>841 ・an unnamed or ill-documented numerical constant value; これを言いたそうな気配はするんだが、なんか違った意味で使ってるよな そりゃ質問もされるだろうよ
843 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 22:52:03 ] 元素か
844 名前:デフォルトの名無しさん [2009/09/05(土) 23:05:49 ] Linuxでは出力もマジックナンバーと呼ぶんだけどな。 ドザは頭が悪くて困る。
845 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 23:09:48 ] C言語でプログラムを作成してる際にわからないことがあったので質問させてください 3次元座標(-0,5、0,5、0)を (sin(t)、t、cos(t)) みたいな形で現したいと思ってるんですがどのように現すのか教えてください よろしくお願いします
846 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 23:16:03 ] どうも使い方の間違いを肯定したくなくてすり替えばかりしているように見える よくあることだけどな
847 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 23:17:38 ] >>845 sin(0.5)は-0.5ではないし、cos(0.5)も0ではないが・・・ どういう意味なので?
848 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 23:19:00 ] >>845 double point_3d[3]; point_3d[0] = sin(t); point_3d[1] = t; point_3d[2] = cos(t); とか?
849 名前:845 mailto:sage [2009/09/05(土) 23:25:39 ] DrawLine関数で (-0,5、0、0)から(-0,5、0,5、0)までの直線をひきたいんですが、その後にその線を変数θを使用して回転させたいと思ってるのでsincosで座標を現したいと思ったのですが 可能でしょうか?
850 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 23:35:32 ] Linuxでも >例えばint foo = 'abcd'としてprintf("%d\n", foo)としたときの出力が、所謂マジックナンバー。 なんていったりはしないよ。 もし言うというなら、Linux板にコピペしてきてそのスレで1000人の同意があったら認める^^
851 名前:デフォルトの名無しさん [2009/09/05(土) 23:43:12 ] >>849 直交座標系と極座標系の変換を知りたいの? もし単に回転させたいならアフィン変換すればいいだけだけど。
852 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 23:48:39 ] >>851 よくわかりません x座標が-0,5なので-cos(60)でいいのかと思ってやってみてもうまくいかなくて… 3次元での座標を表すときのsinθcosθというのは単に数値を入れるのとは全く別物なんでしょうか? (0,5、1、0)の座標をsincosの座標で現したいと思ったときに(cos(60)、1、sin(0))と表してもまったく別の位置に表示されるんですけど
853 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 23:51:36 ] sin,cosの引数はラジアン。
854 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 23:52:08 ] sin、cosの引数は度じゃなくラジアンだから *3.14/180 しないとだめ
855 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 23:59:56 ] ありがとうございます わかりました
856 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 00:29:07 ] こないだからC++以前に数学がわかってないやつが多いな
857 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 00:34:46 ] というか、本にせよリファレンスにせよ、どっかで説明読めば 引数がラジアンだってことくらい書いてあるはず 理論に基づいて組み上げるんじゃなく カンでプログラミングしてるんじゃないか
858 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 00:52:37 ] 普段からsmartポインタって乱用してる? 複雑な管理が必要になる部分以外は余分なコストがかかるから使わないほうがいいのかなって思ったんだけど
859 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 01:02:17 ] RAIIとかPimplイディオムを実現するには必要不可欠だろうが
860 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 01:05:49 ] RAIIとpimplってほんとによく出てくるなぁ。 RAIIはさておき、pimplは目の当たりにしたことがないから実感がわかない
861 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 01:06:50 ] 使わなかったところで、それと同様のコードを自分で書く羽目になるだけ、自分へコストが跳ね返ってくる。 まあ、最も単純かつ実行時の負荷が低コストでしかも標準のauto_ptrが残念な出来なのは仕方がない。 unique_ptrに期待しましょう。
862 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 01:07:24 ] Exceptional C++を読みなせえ
863 名前:845 mailto:sage [2009/09/06(日) 01:51:30 ] すいません さっき教えていただいた通りにラジアンで線を引けたのですが、for文で線を何本も引いて円を書こうと思い (sin(θ×t)、1、cos(0)) とし、tの値を少しずつ大きくしていきました。 そうするとx軸に沿って円がかけるはずだとおもうのですが45度から130度くらいまでの扇形みたいな形しかできません まったく理由がわかりません どなたかアドバイスをください お願いします
864 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 01:59:23 ] 自己解決しました
865 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 02:01:44 ] 質問の文章考えてるヒマがあったらトライ&エラーやってた方が有意義じゃないか?
866 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 08:28:07 ] >>858 乱用してるよ!! スマポのメリット>>>>>>>>>>>>ほんのわずかなコスト
867 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 09:05:17 ] >>858 スマポの評価はboostのスマポ、特にshared_ptrを使ってからしたほうがいい。 マジお勧め。
868 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 11:04:43 ] 確かにboostのshared_ptrはその利便性からいって鬼。 これ以上ないほどの。
869 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 11:12:58 ] FFTで求めた実部データと虚部データから振幅スペクトルを求めるにはどうしたらいいですか? パワースペクトルだと大きすぎるのでさけたいです
870 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 11:19:21 ] >>869 帰れ
871 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 12:08:14 ] >>869 mag=hypot(real,image)
872 名前:デフォルトの名無しさん [2009/09/06(日) 12:19:02 ] >>870 だが断る
873 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 14:29:57 ] グローバル変数を使う時は、関数プロトタイプ宣言より前じゃないとダメなんでしょうか?
874 名前:873 mailto:sage [2009/09/06(日) 14:30:42 ] 日本語おかしかったです、すいません グローバル変数を使う時は、関数プロトタイプ宣言より前にグローバル変数の宣言をしないとダメなんでしょうか?
875 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 14:32:20 ] グローバル変数の宣言と関数プロトタイプは何の関係もなくね?
876 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 14:33:31 ] そうでしたか、ありがとうございます
877 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 15:45:55 ] かかわるプロジェクトでは必ず三項演算子は目の敵になってるんですがgotoみたいな存在なんですか?
878 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 15:48:40 ] そんなことないよ。 記述の仕方を統一したかっただけじゃない?
879 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 15:51:37 ] 行数稼げないからって理由だったら嫌だなw
880 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 15:54:15 ] >>877 なんでだろね。 どうも三項演算子を理解できないレベルに合わせろってことらしいんだが、まじかね。
881 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 16:26:07 ] 理解なんて数秒で済むと思うんだけど 古いコンパイラで条件演算子にバグがあって禁止されていた事はあった
882 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 16:58:04 ] >>880 構造化プログラミングから逸脱する場合には不可ってことだと 思うんだけど、本質が理解されないまま全部NGになってること はよくあるね。 参考演算子そのものの理解は当然だれでもできる。
883 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 17:01:43 ] ゴメン、「三項」ね。
884 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 17:02:09 ] 三項演算子は()を下手に省略するとアレ?って挙動になってバグ取り高い壁になる
885 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 17:10:05 ] >>882 構造化プログラミング? 逸脱する場合としない場合kwsk。 逸脱するというのであればすべて逸脱では。
886 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 17:14:19 ] どんな用途か知らんが、三項演算子は特に問題ないと思うがw
887 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 17:17:26 ] >>882 三項演算子どころか、ポインタもろくに理解せずに仕事してるやつ多数。 それが現実。
888 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 17:23:23 ] int x = 0; int y = 0; bool b = なにかを代入; //逸脱しないとき if (b) { x = 123; } else { x = 456; } これは、x = b ? 123 : 456; とできるけど、bの意味する内容とか局所性によってはまぁ許容かな…。 //逸脱するとき if (b) { x = 123; y = 234; } else { x = 456; y = 789; } こっちは x = b ? 123 : 456; y = b ? 234 : 789; で書けるけど、b の真偽値に応じた代入処理のセットだと言うことが分からない。 elseifの節が後で現れるともう保守性までNG。>>885 の指摘通り、逸脱するかと 言えば全部逸脱だと思う。ちなみにオレは三項演算子は、ほぼNGにしたい派。
889 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 17:27:37 ] >>888 そもそもそんなコード書かないだろというか例が悪すぎるw
890 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 17:32:20 ] 何とも都合のいい主観判断をするものだ
891 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 17:33:21 ] >>888 なんでNGかkwsk。 2つ目みたいな書き方はめったにしないと思うが、その最初の例でNGにしたい理由は?
892 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 17:36:16 ] class HogeString { private: char* str; public: bool isEmpty()const{ return (name == NULL) ? true : false; } // これをifで書いたら bool isEmpty()const{ if(name == NULL){ return true; } return false; } }; ifだと冗長的な感じがする。こういうのは三項演算子でも良いと思うんだけどな。
893 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 17:38:30 ] return name == NULL;
894 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 17:41:46 ] ですよねぇ〜。書いた後で気づいたわ。
895 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 17:43:47 ] ワロタ
896 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 18:54:01 ] string, int, int, int の4つのデータをまとめて扱いたいのですが、 mapだと2つ以上の値のセットを扱うとエラーが出てしまいました。 こういう2つ以上の値のセットを扱うためのコンテナってありますか?
897 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 18:56:27 ] keyとなるものだけを残して他の3つは構造体かクラスにすれば良いじゃん。
898 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 20:36:57 ] namespaceってプロジェクトにひとつぐらいで十分?もっと細かく分けたほうが良いかな
899 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 20:37:19 ] CからC++に来たけど&が参照だったりアドレスだったりして気が狂いそうです
900 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 20:39:40 ] >>898 好き好き。 >>899 狂ってろ。
901 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 20:52:05 ] *がポインタ宣言だったり参照はがしだったり掛け算だったりする Cから来たなら大丈夫よ
902 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 21:07:11 ] >>899 使い方が全然違うじゃん。 ・・・それぐらい分からないと他言語でも無理だろ。
903 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 21:08:13 ] >>898 俺は2階層ぐらいだけど。 一番大きいプロジェクトの根幹のnamespaceと、 namespace implementationとか。
904 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 21:37:13 ] C++のSTLに含まれているstringのメンバ関数に、 find_first_not_ofというものがありますが、 この関数を find_first_not_of("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789") という風に使って、アルファベットと数字とアンダーバー以外の文字数が 最初に出現する文字数を調べようとしたのですが、うまく働いてくれません。 (;や+などを感知してくれません) これはなぜでしょうか?
905 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 21:46:43 ] >>904 とりあえずソースかけ。 話はそれから。
906 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 21:49:20 ] >>904 codepad ttp://codepad.org/ ここで。
907 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 21:53:17 ] >アルファベットと数字とアンダーバー以外の文字数が最初に出現する文字数 文字数が出現する文字数ってなんだ?
908 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 22:12:22 ] ちょっとぐらい間違ってる日本語を補正する頭もないのかお前は
909 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 22:25:16 ] >>908 2か所間違ってるけどな。 まあなんにせよ>>906 にあるところに貼ってくれるのをまとう。
910 名前:デフォルトの名無しさん [2009/09/07(月) 19:31:24 ] CあるいはC++でSQLサーバに接続するにはどうしたらいいのでしょうか? 検索しても.NETFrameworkを使ったやり方しかなく困っています どなたかご教授お願いします
911 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 19:32:59 ] sage忘れすまそ('A`)
912 名前:デフォルトの名無しさん [2009/09/07(月) 19:48:12 ] 質問です。 32ビットのWindowsの場合malloc()で確保出来るメモリサイズは2Gほどだったと思いますが、 これは、1プロセスあたりの制限ですか? 1つのプログラムで、malloc()を2カ所で呼び出すと、それぞれの箇所で2G確保できるのでしょうか?
913 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 19:54:23 ] >>910 ODBCでよければ、 ODBC C++とか、ODBC VC++で検索。
914 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 20:11:32 ] >>912 プロセスごとに2GB
915 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 20:40:05 ] >>912 どんだけ激しいメモリ消費なんだw
916 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 20:44:44 ] >>914 THX 困ったなぁ・・・。ディスクアクセスしながらちびちびやるか。 >>915 48Gほどのテキストデータを木構造に展開して色々やらないといけないのよ。 う〜む、もう少しダイナミックにオンメモリでやりたかった・・・
917 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 20:45:33 ] >>916 You, 64ビットに移行しちゃいなYO!
918 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 20:48:57 ] BDが真っ青
919 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 20:53:13 ] >>916 64bitしかあるまいw どのみちそんなにメモリ詰めないだろw
920 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 20:59:40 ] サーバ用でもない限りマザーボードの上限に引っかかるな
921 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 21:25:21 ] >>916 アルゴリズムを検討してメモリの消費量を抑えるのが手っ取り早い。そのほうがいろいろ高速化できる。 それでも解決しないなら最後の手段として64bitOSと64bitコンパイラの採用を考える事になると思うよ。 どんなにメモリがあってもアルゴリズムを改良しないと演算時間がとてつもなくかかりそうな予感。
922 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 21:43:58 ] 48GBのテキストデータって何ぞ? 漏れのおかずフォルダでもそんなにねーぞ。
923 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 21:59:47 ] >>922 そうか、本当に無いのか検証の必要があるな。よし、どっかにアップロードしろ。
924 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 22:00:23 ] ゲーム作っててつまずいたので質問します struct Test{ TEST1 b[2]; 省略 } std::list< Test > lstTest; こうやって使ってるんですが、このTEST1の配列を動的に確保することってできますか? リストの中にリストとかしてみたんですが、同じような動きにならなくて困ってます。(ポインタの問題?
925 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 22:10:58 ] リストの中にリスト、大丈夫なはずだが
926 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 22:11:14 ] 64Gって、研究かな? 今は、64Gのテキストデータなんてのを普通に使うようになったのか・・ 恐ろしい時代だ・・・。
927 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 22:12:01 ] >>924 struct Test { std::vector<TEST1> b; }; でいいと思う。 あと解説サイトを見てlistとvectorの使い分けを覚えよう。
928 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 22:14:01 ] list -> 知的でおしゃれな感じを出したいときに使う vector -> スマートなやり手プログラマを演出したいときにはコレ deque -> 研究者気取りのあなたに
929 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 23:22:48 ] 48GBとかのデータを扱うなら、クラスタ上でMPIとか使って並列プログラミングってのが筋かなあ
930 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 23:54:41 ] buf[10] = 0xff buf[11] = 0x32 ... int kansu(u_1 *buf){` i = 10; printf("test buf[i] %d", i, buf[i]) このようなプログラムで、引数で配列を渡したとき printfでbuf[10]等の中身を見ようとしたとき、表示がおかしな値になるのですが どうしてでしょうか? %d, %s, %x 等もおかしかったのですが
931 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 23:55:52 ] "test buf[%d] %d" では?
932 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 00:14:45 ] >>931 すみません、ここに書き方間違ってました。 実際のプログラムではそうかいてます。申し訳ありません。 そう書いて、表示がおかしかたtのです
933 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 00:23:39 ] %x
934 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 00:34:53 ] ソースを張るなり上げるなりしてください
935 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 00:40:31 ] u_1が何なのかわからないとなぁ typedef unsigned char u_1; だったらprintf()はスタック破壊してるだろうし typedef unsigned long double u_1; だったら表示がおかしいとかの次元じゃないし
936 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 00:47:23 ] >>935 u_1は、unsignede char です スタック?どの辺がおかしいのでしょうか?
937 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 01:06:55 ] >>930 断片だけ書かれてもわからん。 おかしな値が再現するソースを見せてくれ。
938 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 01:11:54 ] >>937 すみません、今手元にないのでそのままお見せできないんですが 下のような感じです。とはいってもさっきと一緒で分かりにくいでしょうが・・ buf[50] ; buf[1] = 0; buf[2] =5 等代入 void kansu(buf); void kansu(u_1 *buf){` i = 10; printf("test buf[%d] %d", i, buf[i]) printf以降でbuf[i]の中身を別のバッファにコピーしてるのですが、 それを確認しようと思い、printfで確認しようとしたところ まずその確認以前にうまく表示できなかったもので・・・
939 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 01:18:12 ] そもそも、bufの型はなんなんだ? メモリは確保されてるのか?
940 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 01:18:36 ] >>939 malloc関数でかくほしております
941 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 01:19:31 ] >>939 bufは、unsigned char です
942 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 01:23:51 ] mallocで確保するんならbuf[50]は変な気がするけどな。
943 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 01:40:27 ] >>941 > i = 10; > printf("test buf[%d] %d", i, buf[i]) 別に表示がおかしくなることはないと思うがな。 この部分の、期待している表示と実際の表示を書いてくれ。
944 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 07:33:43 ] >>943 期待しているのは、buf[i]に代入した値が表示したいのですが、 全く関係ない数字が表示されてしまいます。4桁とか
945 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 07:47:07 ] 部分だけじゃ、どこがおかしいかわかんねえよw
946 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 08:04:01 ] いくら間違っても4桁になるのはありえなさそうなんだが。。
947 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 08:31:55 ] >>938 まだコードが断片すぎる。コンパイルできるぐらいのまとまったものが ないと他の人には問題は発見できないよ。
948 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 09:21:13 ] printf("%d", (unsigned char) 0xff)が何を表示されるのかって問題に帰結するのかな? それだったら255だ。これがもしprintf("%d", (char) 0xff)ならば、-1かもしれないが。 それ以外の結果になるというのであれば、他の何かがおかしいのだろうよ。
949 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 18:03:25 ] fopen()でファイルを開くコストって結構かかる物なのでしょうか? 今実装してるプログラム、メモリ的な制限から探索範囲を狭めるために、ファイルを結構細分化するつもりなんですが・・・
950 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 18:15:34 ] >>949 ベンチマーク取ればいいが、 どんだけ多くても数百個だろ?一瞬。 むしろそれを超えると、OSの最大ディスクリプタ数にひっかかる。
951 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 18:16:48 ] >>949 まあストレージの種類によるんじゃないかな。ハードディスク上のファイルだと、 ファイルが分散しててディスクヘッドが頻繁に移動するのはハード的にきつい
952 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 18:30:14 ] >>949 48Gテキストの人か
953 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 18:59:52 ] 頻繁にファイル開いて読み込んでってやってたらかなり遅くなるな。 一回読み込んだ内容はメモリ上にキャッシュして、キャッシュあふれたら 使用頻度低いほうから解放して…みたいな戦略は考えといたほうがいいと思うね。
954 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 20:04:30 ] >>949 ファイルのオープンクローズよりも、開いたファイルでシークしたほうがはるかに軽い。 ファイルの一部分をメモリにマップする手法としてメモリマップドファイルがあるよ。 ディスクキャッシュをメモリにマップするんで大きなデーターを効率的にアクセスできる。
955 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 20:08:25 ] Hoge::operator[](A,B,C); hoge[a][b][c]; みたいなことができればいいのになんでできないんだよ
956 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 20:25:33 ] >>955 それでオーバーロードを許したらambiguous多発で大変じゃないか
957 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 20:44:33 ] まあ仕方ないからhoge[make_tuple(a,b,c)]; とかやってるんだけどもっとクールアンドホットなハック的テクはないわけ?
958 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 20:46:37 ] >>957 プロキシーオブジェクト
959 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 20:53:26 ] >>955 ちょっと工夫すればできるから。
960 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 21:02:07 ] やろうと思えばそりゃできるけどさ コストとか範囲チェキとか考えると[][][]・・・でできるいいほうほうが浮かばないんだよ
961 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 21:02:39 ] >>955 ,958 ちとめんどいができるじゃんと思ったら あれプロキシーオブジェクトっていうのか 初めて知った。さんくすw
962 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 21:02:51 ] >>957 operator()じゃ駄目なのか?
963 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 21:03:31 ] >>962 見た目がまずダサいのでアウト
964 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 21:07:57 ] make_tupleにダサイって言われると地味に凹むな
965 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 11:35:00 ] 同意
966 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 23:13:55 ] ある本の息抜き用の演習問題に、「++CではなくC++と名付けられた理由を考えよ」ってのがあったのですが 正解は何なのでしょうか?
967 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 23:19:55 ] Cの互換性を保つため
968 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 23:26:45 ] あ、なるほど。前置インクリメントだともはやCではないものを意味するってことですね。
969 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 23:49:38 ] まあ、今適当に考えただけなんだけどねw トンチ的な問題だろうから、たぶんそんなに的はずれでもないと思う
970 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 04:17:25 ] へんなコストがかかるところ
971 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 11:40:42 ] >>970 深いな。
972 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 13:58:48 ] //beginコード1 for(int i=0; i<5; i++){ // コード } int i; for(i=0; i<5; i++){ // コード } C++で上か下、どちらのループの方が良い(皆さん使われている)のでしょうか?
973 名前:972 mailto:sage [2009/09/10(木) 13:59:57 ] 1行目の //beginコード1 は間違いです、すみません
974 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 14:03:33 ] i の中身がループの外でも意味を持つなら後者、持たないなら前者で十分。 どっちが良いとか悪いとかじゃなく。
975 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 14:35:18 ] >>974 なるほど、ありがとうございます。
976 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 15:45:51 ] >>966 C++ : Cを評価してからインクリメントする ++C : Cをインクリメントしてから評価する C++ は、まずCを評価してから機能を加えたんだよ。
977 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 17:13:48 ] baseクラスがいくつかの仮想メンバ関数を持っています(たとえば、void f1(), void f2()) f1の実装は2パターン、f2の実装も2パターンあります subクラス側で外部ファイルを参照してそのデータからf1,f2の組み合わせを決定したいです この場合4種類のsubクラスを作るほかやり方はありますか?
978 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 17:16:35 ] 仮想関数f1だけのクラスと仮想関数f2だけのクラスをそれぞれ作って2パターンずつ実装し、 subのf1, f2は単にそっちを呼び出す
979 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 17:17:02 ] >>977 f1 なり f2 の中で条件分岐すればできる
980 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 17:27:46 ] >>978 つまりこういうことでしょうか? class hoge { private: only_f1_impl *f1_; only_f2_impl *f2_; public: void f1(){f1_->f1();} void f2(){f2_->f2();} }; メンバ変数へのアクセスで一手間かかりそうですが、よさそうなので使わせてもらいます ありがとうございました >>979 条件分岐は後で大変そうなのでちょっと・・・
981 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 19:56:01 ] ##ってどういう意味か教えてください
982 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 20:01:49 ] そのトークンが現れる位置によって意味が異なるので一概に答えることはできない
983 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 20:38:19 ] インスタンスがshared_ptr(かweak_ptr)の形でしか生成できなくすることってできる?
984 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 21:07:22 ] >>983 コンストラクタをプライベートにして、ファクトリメソッドを書くとか。