1 名前:v(^・^)v mailto:sage [2010/02/13(土) 23:18:03 ] C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。 前スレ C++相談室 part77 pc12.2ch.net/test/read.cgi/tech/1263556932/
862 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 01:38:21 ] >>857 num_of_argsが要らなくない?無いほうがすっきりしないか?
863 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 01:55:12 ] 俺もそう思う。 どうせ特殊化で生成するなら、オーバーロードでいいんじゃね?
864 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 02:07:19 ] >>858 boostはよく知らないんですが後でちょっと探ってきます >>589 これは面白いですね コード生成は避けられんませんが、ちょっとシンプルになりました >>860 待ちきれません >>862 ,863 array<3> a(10, 15, 20); a(1, 5, 3) = 100; こんな感じで使おうと思ってるんで、num_of_argsは欲しいです
865 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 02:10:31 ] 俺も要らないと思うわ
866 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 02:13:28 ] なぜ[a,b,c]という演算子がないのかっていう有意義な疑問に帰着するわけね。
867 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 02:14:53 ] >>866 x[Index(a, b, c)] で代用できるから
868 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 02:27:47 ] 1次元の配列が作れる。n次元の配列に[a]演算子を適用するとn+1次元の配列が作れるならば、数学的帰納法で無限の次元の配列が作れることが証明できる。 早い話がvector<vector<vector<int>>>だね。
869 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 02:39:36 ] >>860 g++ 4.4ではもう使える。
870 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 02:40:37 ] ここ数日の質問って何をしたいのか見えてこないのが多いな
871 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 03:10:09 ] c++の文法書ってありますか? 書店に行ってもプログラミングの入門書ばかりで 言語仕様の解説書が見つからなくて困ってる 組み込みやる事になってgcc、GNUARM使う事になったんだが 文法がまるで分からん(K&R〜ANSIの頃のCは随分使ったんだが)
872 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 03:11:27 ] 仕様書読めばいいじゃない
873 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 03:13:49 ] >>871 JIS規格ならJISのサイトや取り扱ってる書店で発注すれば購入できたり無料で見たりできるお!!!!!!
874 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 03:16:24 ] >>871 ja.lmgtfy.com/?q=C%2B%2B
875 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 03:19:23 ] 文法がまるでわからないのなら むしろ入門書のほうがいいんじゃないのかw ってか組み込みならそんなに難しい文法の知識いらないし、 むしろ環境構築の方が面倒な気がするけどね
876 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 03:22:54 ] >>871 単にCの延長でいいなら入門書読めば事足りるはず。 C++らしいコードが書きたいなら Effective C++とかMore Effective C++でも読んどけば?という感じ。 厳密な文法が知りたければISO/IEC 14882:2003が言語仕様書ということになってるが、 これを読んで特定の目的を達成するコードが書けるとは思えんなあ。
877 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 03:26:22 ] まぁ気持ちは分かる 入門書だとオペレーターオーバーロードとかnamespaceとかそんなん吹き飛ばして いきなりstd::coutとか使い出すし
878 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 03:30:29 ] >>877 しかも、その場合、ADLまで絡んでくるしな。
879 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 03:34:03 ] 俺も昔厳密な仕様が知りたいけど 仕様書とかダルイっていう舐めた態度の時にこの本買った www.hir-net.com/book/book14/index.html >>877 な感じで詰まってるなら入門書と並行してこういう本買ってもいいかもね 最近は色々種類あるだろうし翻訳物もあるだろうから本屋行って選ぶよろし
880 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 04:04:01 ] 組み込みなら組み込みのスレで尋ねた方がいいと思うぜ C++の一般論が必ずしも当てはまるとは限らんから
881 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 12:59:49 ] >>871 組み込みなら C 使えよ。 お前みたいなのが C++ 使うとバグが増える。 とりあえずヘッダ自動生成とかのツール類で 勉強してからにしろ。
882 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 13:03:01 ] デストラクタもないCにいわれてもな
883 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 13:06:49 ] >>881 > とりあえずヘッダ自動生成とかのツール類で > 勉強してからにしろ。 何を言っているんだw
884 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 13:13:53 ] というか、強い静的型付けもないCなんかで書いたら、誰でもバグが増えるわ。
885 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 13:58:08 ] >>882-884 組み込みは製品になるとスタックダンプとレジスタぐらいしか なくてアセンブラだけで解析すんの大変なんだぜ。 お前らみたいな糞コードのバグ解析がこっちに 回ってきて迷惑なんだよ。
886 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 14:04:43 ] そういうクソを調教するためにMISRA-Cとかがあります
887 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 14:29:06 ] >>885 組み込みつったって規模があるだろう それこそメモリが数kbしかないものもあれば、OSが載っているようなシステムだってある 少し極論じゃないのか
888 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 14:40:51 ] Cでバグが減る根拠を挙げてもらおうか
889 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 14:46:53 ] 誰もそんな事言ってないから
890 名前:デフォルトの名無しさん [2010/03/14(日) 18:41:27 ] template<typename T> void foo(const T& arg){ if(T::hoge_flag){ func_true(arg); } else{ func_false(arg); } return; } この様なコードがありまして、T::hoge_flagは T型によりコンパイル時に決定されるconst bool型の定数とします。 すなわち T::hoge_flag の真偽によって func_true(arg);とfunc_false(arg);の一方だけが必ず実行され 他方は必ず実行されないことになります。 こういった場合は、テンプレートメタプログラミングを使って 一方だけのコードが実行バイナリファイルに含まれるようにすべきなのでしょうか。 それともコンパイラの最適化を期待して上記のコードのままでも良いのでしょうか。 よろしくお願い申し上げます。
891 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 19:09:38 ] コンパイラの機嫌しだい
892 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 19:10:12 ] >>890 最適化に期待すれば十分だと思うよ。 実測してその部分がパフォーマンスに影響することが分かってから改良しても遅くないよ。
893 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 19:20:20 ] そういう場合テンプレートメタプログラミングを理解できないコンパイラだったら 困る・・・か?そんなバカコンパイラは想定しない方が良いか。
894 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 19:20:28 ] struct when_true{ inline static void func(arg_t); }; struct when_false { (ry }; if_<flag, when_true, when_false>::type::func(arg); 確実性を考えると↑のように関数化しないといけない 結局のところオーバーヘッドは避けられないからif elseのままでいいよ
895 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 19:25:09 ] たとえば、 template<bool N> void func(); でN値による特殊化なんかできるのかな
896 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 19:32:55 ] こんなので切り替えれられるとおも浮けど、わざわざ属性を示すクラスが下からあればいいけど、わざわざ作るなら、ifのほうが分りやすいかもな。 class TypeA{}; class TypeB{}; class hoge :public TypeA { }; class fuga :public TypeB { }; template<class T> void func(const T& obj,typename boost::enable_if<boost::is_convertible<T*,TypeA*>>:type* =0) { } template<class T> void func(const T& obj,typename boost::enable_if<boost::is_convertible<T*,TypeB*>>:type* =0) { } void test() { hoge h; fuga f; func(h); func(f); }
897 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 20:07:40 ] if文の削除なんてあまりにも可読性が低くなってる場合しかオレはやらないな 速度やコードサイズの最適化なんてたかがしれてるだろ >>896 わざわざややこしくしてないか? それだったらenable_if_cにして直接T::hoge_flagを突っ込めばいいんじゃん typename boost::enable_if_c<T::hoge_flag>:typeと typename boost::disable_if_c<T::hoge_flag>:typeだけで 他にクラスや関数を用意する必要はないはず まあこんなことしなきゃならないほどカツカツなら 他に検討すべき箇所があるんじゃないのかね
898 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 20:08:46 ] >>895 できるっしょ。 template<bool b> void func(){〜}; template<> void func<true>(〜); これでおkでは?
899 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 20:44:03 ] もう面倒だからboolじゃなくて関数ポインタででも持たせとけよ。
900 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 20:50:27 ] 関数ポインタは最適化の障害で(ry
901 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 20:55:24 ] コストとコードサイズ小さくしたいのにカンポはねーよ・・・
902 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 20:57:24 ] 結局ifelse書いて最適化に期待するのに落ち着きそうだな 関数化するまでも無い分岐の場合は特にそうだろう
903 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 20:59:40 ] この状況で関数ポインタ持たせたら 逆効果じゃねぇかwwwww
904 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 21:00:55 ] コンパイル時に定まるif elseで絶対に実行されないことが 分かる場合、それでも最適化できないバカコンパイラって 知っている? それを最適化できないとなるともっと重大な所でも 最適化できなさそうな気がするが。
905 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 21:19:48 ] codepad.org/3HNtsPNZ なんでこれが期待どおりに動いてるのかよく分からない
906 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 21:47:54 ] Conceptさん・・・Conceptさんを呼べ!!
907 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 21:51:07 ] templateの部分特殊化とSFINAE。 メンバT::swapが存在し、かつvoid (T::*)(T &)が&T::swapに置き換え可能ならば (その場合のみ)has_swap_implの部分特殊化が選択される。
908 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 21:55:48 ] カードゲームの効果解説かと思った。
909 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 22:40:36 ] >>888 >>871 は C はそれなりに書けるようだが、 解説書見ながら C++ で書いてより高品質なソフトが 書ける理由がないだろ。 どうせ new[] したのを delete するようなコード 書いて地雷仕込むのがオチ。
910 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:18:09 ] >>905 まず、has_swap<T>はどんな型にも適合するのでhas_swap<hoge>の実体化が行われる。 コンパイラはhas_swap<hoge>の基底クラスとして、has_swap_impl<hoge, void>を実体化しようとする。 なお、has_swap_implの第2テンプレート引数は省略されているのでデフォルトのvoidが使われる。 has_swap_impl<hoge, void>を実体化しようとした際に、 コンパイラはまず、より特殊化されたバージョンである 14行目のバージョンに適合するかのチェックを行う。 ここで問題は、typename has_swap_helper<T, &T::swap>::type が void と一致するかどうか。 ・メンバ関数としてvoid T::swap(T&)が存在するならば、has_swap_helperのテンプレート引数が確定し、 かつ4行目のテンプレートに適合するので、4行目のテンプレートが実体化され、voidになる。 すると、has_swap_impl<hoge, void>は14行目のバージョンに適合する。 ・void T::swap(T&)が存在しないならば、適合するhas_swap_helperは「存在しない」。 通常の感覚ならばエラーになりそうだが、 SFINAEの規則によってエラーとはならず、 単に14行目のバージョンが候補から除外される。 コンパイラは次に9行目のバージョンの実体化を行おうとする。 9行目は何でも適合するので、has_swap_impl<fuga, void>は9行目のバージョンに適合する。 あくまでもhas_swap_impl<hoge, void>がどれにマッチするかが問題なので、 たとえば6行目のtypedefをintに変えたりするとダメ (その場合、9行目を class U = int にすればいい)
911 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:20:30 ] っていうオーバーロード解決に至るまでの経過を出力してくれるコンパイラないかなぁ 特殊化とかADLとか絡んでついていけない時がままある
912 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:25:19 ] 言い出しっぺの法則発動
913 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:33:42 ] あ、>>910 間違えてた。 誤) ・void T::swap(T&)が存在しないならば、適合するhas_swap_helperは「存在しない」。 正) ・void T::swap(T&)が存在しないならば、has_swap_helperのテンプレート引数が確定しない。
914 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:34:08 ] #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct TestData { int id; char *name; char *sp; char *sx; int nr_param; char *param; } TestData; #define PARA(max,at,sp) ":" #max "," #at "," #sp static TestData test_array[] = { { 1, "NA", "SpA", "M", 3, PARA(0, 0, 1) PARA(2, 3, 4) PARA(5, 6, 7), }, { 2, "NB", "SpB", "???", 1, PARA(1, 2, 3), }, }; void dump_testdata(TestData *t) { int i; const char *p; printf(" Id:%d, Name:%s, Sp:%s, Sx:%s\n", t->id, t->name, t->sp, t->sx); p = t->param; for ( i = 0; i < t->nr_param ;i++) { int m, a, s; m = atoi(p = strchr(p, ':')+1); a = atoi(p = strchr(p, ',')+1); s = atoi(p = strchr(p, ',')+1); printf(" param: max:%d, attack:%d, speed:%d\n", m, a, s); } } int main(void) { dump_testdata(&test_array[0]); dump_testdata(&test_array[1]); return 0; }
915 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:35:40 ] アンカー消えた。 >>914 は >>852 これくらいしか思いつかん。
916 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 23:57:05 ] >>907 ,910 どうもありがとう、なんとなくわかってきた なるべく特殊化が強いのを優先的にリストアップして最初に合致したやつを使うということですね
917 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 00:03:50 ] C++使ってちょうど2年半の者です。 テンプレートメタプログラミングって とても難解そうで ほとんど学んでいないのですが、 例えば>>890 さんの場合ですとどうすればいいことになるのでしょうか。 どなたかコードを(boost::mplのような出来合いのライブラリを 使用せずに)書いてくださいませんでしょうか。 よろしくお願いします。
918 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 00:19:42 ] >>917 最近、C++を勉強し始めたからテンプレートを勉強していないんだけど こんな難しそうなのを「みんな出きるのか〜」とビビってたぜ あぁ〜安心した
919 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 00:24:32 ] メタプロはライブラリ作者のためのものと言い切っても過言ではない 知ってても使う場面は実はそれほど多くない(なくても実装できることが多い)し 使える場面だとしてもすでにできの良いライブラリがあるからそっちを使うことになる
920 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 00:24:39 ] これは静的(コンパイル時)なのか動的(実行時)なのか とかを意識すると多少理解が楽になる
921 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 00:35:15 ] >>917 boost::mplを使えるようになれば自然と覚えられるよ。
922 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 01:13:45 ] こういうこと言うと否定されるのかもしれないけど TMPって出来合いのライブラリを使うプログラミングだと思う 自分でメタ関数やシーケンスをフル実装してる奴とかいるのかね そういやTMPの本が出版されたんだっけ?
923 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 01:19:46 ] templateでメタプログラミングするのが嫌なら別の方法でメタプログラミングすればいいよ。 template使ってる人は型レベルとの相性が良い(というか型レベルそのものだ)から好きで使ってるだけ。
924 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 05:19:50 ] >>917 自信ないけどこんなんでどうか ttp://codepad.org/jyhjFg0S ところで、こういうのって、boolでやるのと struct true_tag {}; struct false_tag {}; とかを定義してやるのと、どっちがいいんだろ?
925 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 06:57:33 ] >>917 これでいいっしょ。 template<typename T, bool b> void foo_impl(const T &arg) { func_true(arg); } template<typename T> void foo_impl<T, false>(const T &arg) { func_false(arg); } template<typename T> void foo(const T& arg) { foo_impl<T, T::hoge_flag>(arg); } まあTMPなんて必要性が感じられなければ無理に使うような物でもないと思うよ。 付け焼刃の知識では早々使えるコードが出てくることもない。 何に使えるのかわかってからでも使い始めるのは遅くない。 まずは既存のコードでどう使われているのか観察することだな。
926 名前:917 mailto:sage [2010/03/15(月) 10:53:59 ] みなさんありがとうございます。 C++0xではテンプレートメタプログラミングをサポートするためだけにあるような 機能が増えると伺っておりましたので、そろそろ勉強し始めるときが 来たような気がしています。
927 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 12:28:21 ] >>922 そうだとおもう。テンプレートは作るのは地獄だけど、使うのは楽になるように作るように心がけてる。 関数テンプレートなんか型推論で殆ど型引数を書かなくてすむのに正しいコードが出るんだから、丁寧に作った関数テンプレートは使う側にとって大きなメリットがあると思う。
928 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 13:17:19 ] >>927 お前はテンプレートメタプログラミングってなんだか理解しているのか? > 関数テンプレートなんか型推論で殆ど型引数を書かなくてすむのに > 正しいコードが出るんだから、丁寧に作った関数テンプレートは > 使う側にとって大きなメリットがあると思う。 >>922 もみんなもテンプレートメタプログラミングの話をしているんだけど。。。
929 名前:928 mailto:sage [2010/03/15(月) 13:18:35 ] ああ、分かった。 >>927 はTMPがTeMPlateの略だと思ってた訳か。 これで文脈が繋がった。
930 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 15:19:03 ] ネットの画像のURLから隠しフォルダ「Temporary Internet Files\Content.IE5」以下に検索をかけてファイルを見つけようとしています。 ファイルは見つかるんですが、a.com/aa.jpg からだとファイル名はaa[1].jpgになっています。 zzzzzz.com/aa.jpg とではファイル名の区別がつきません。Temporary Internet Filesのファイルをプロパディで 見るとURLの情報が解るのですが、この情報を参照できるような関数や方法ってありませんか?
931 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 17:08:24 ] 環境依存OKなスレで聞きなよ
932 名前:930 mailto:sage [2010/03/15(月) 17:21:02 ] >>931 もしかして自分だけですかね?Temporary Internet Filesの特性かと思っていました。
933 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 17:31:05 ] それで?C++という言語の何を訊きたいの?
934 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 17:35:21 ] return static_cast<931::環境依存>(930の悩み); //invalid static_cast form type "932.オレだけ?" to type "世界平和"
935 名前:930 mailto:sage [2010/03/15(月) 17:52:06 ] C++で作って詰まって短絡的に聞いてしまいました、すみません。 D:\Temporary Internet Files\Content.IE5を見たところindex.datがあるので、ここでファイルとアドレスを関連付けて \Temporary Internet Filesに表示させてる? datをC++で読み込んで目当てのファイルを見つけることは可能でしょうか?
936 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 18:01:30 ] _,,_ /´o ヽ ,.ィゝ l  ̄ヽ l l ヽ___ / ,,...---`ニニニ==、,,__ l / ヽ ヽ ヽ ヽ ヽ ヽ ヽ l三三三> | iヽ ヽ ヽ ヽ ヽ ヽ ヽ/三三/''ー- 、 ヽ. ヽ、ヽ ヽ ヽ ヽ ヽ.∠三=‐''´>‐--‐' ヽ、`'''ー‐---‐'''´_,,...--‐'''´ `''ーッ--t_,r'''´ _/._/
937 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 18:33:35 ] >>935 そうでなくて、Windowsという環境依存なプログラムについては「環境依存OKなスレで聞きなよ」ってことでしょ
938 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 18:56:25 ] >>930 【初心者歓迎】C/C++室 Ver.71【環境依存OK】 pc12.2ch.net/test/read.cgi/tech/1264774545/l50
939 名前:930 mailto:sage [2010/03/15(月) 19:00:08 ] スレチですね。見当違いですみません…
940 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 20:13:17 ] >>925 二つ目のfoo_impl()はコンパイルエラー起こすだろ 関数テンプレートで部分的特殊化は無理
941 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 21:25:05 ] STLのvecterの配列に対してクイックソートを組んだんですが動きません ソース : codepad.org/YM2RidkL 47、48行目の再帰処理のあたりが原因だと思うのですが、誰か助けてください
942 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 21:55:20 ] 勘だけど 43、44行目あたりかな
943 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 22:01:47 ] 見た感じだと44行目か36行目のどっちかだな
944 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 22:10:03 ] 見てないけど44行目かな
945 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 22:14:34 ] どうみても44が--
946 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 22:45:42 ] >>944 > 見てないけど おいw
947 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 23:16:01 ] >>871 です >>876 ありがとうございます、一番参考になりました 近日中に都会に出かけるのでwあったら立ち読み&購入検討してきます 何度かパーサを書く仕事をしたので、どうしてもライブラリより構文に目が行ってしまいます 最近はそういうの流行らないみたいですね もはやIBM流の構文チャート?やBNFで定義できるような言語じゃないとは 噂で聞いてはおりますが…
948 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 00:23:47 ] >>941 添え字10のアクセス違反って出てるじゃん m_array[9]に値入れた後にjをインクリメントしてるんだろ >>947 は組み込み自体やった事なさそうな感じ
949 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 02:36:50 ] class hoge { const fuga &f; public: hoge() : f(fuga_sub()) { } }; const参照はテンポラリオブジェクトを束縛すると聞いたんですが、↑のようにするとバグります。なぜなんでしょうか?
950 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 02:37:50 ] fはhogeのコンストラクタスコープでしか生きてないインスタンスをさしてるから
951 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 05:58:00 ] >>948 ええ、組み込みは初めてです 使ってもいいライブラリはサンプル等あるんで問題ないんですが コンストラクタの初期化リストなんて初めて見ました トッパンのC++の本なら昔買いましたが、今更役に立ちませんよねw
952 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 07:58:42 ] >>949 初期化リストで使った場合、コンストラクタの終わりまでしか延命されない。 規格の 12.2 p5 より。 > ... A temporary bound to a reference member in a constructor's ctor-initializer > persists until the constructor exits. ... その特別ルールが役に立つのはほぼ自動変数だけ。