1 名前:デフォルトの名無しさん [04/10/02 12:28:23] C言語、C++言語のコーディングスタイルについて クールに語るスレッドです
2 名前:デフォルトの名無しさん [04/10/02 12:32:32] 特にこれから学習する人は、まだ独自の癖が付く前に ゴラァされにくいコーディングスタイルを身につけましょう
3 名前:デフォルトの名無しさん mailto:sage [04/10/02 12:41:43] #include <2c.h> main(){ return 0; }
4 名前:デフォルトの名無しさん mailto:sage [04/10/02 12:44:41] int count, temp, data; カンマの後にスペースを置き、空白の美を堪能する if (foo > 10){ if, whileの直後もスペース推奨。関数との差別化を図る
5 名前:デフォルトの名無しさん mailto:sage [04/10/02 12:53:32] if (...) { } else { } と書く奴はキモイ
6 名前:デフォルトの名無しさん mailto:sage [04/10/02 12:58:03] >>4 int count, temp, data; これは以下のようにするように推奨しているけど少数派かね。 int count= 0; //変数の意味を記述 int temp = 0; int data = 0; 理由は、編集のし易と int *a,b;とあったときにbをポインタと勘違いするミスを防ぐため。
7 名前:デフォルトの名無しさん mailto:sage [04/10/02 12:58:19] if (...) { } else if (...) { } else { } クール。グルービー
8 名前:デフォルトの名無しさん mailto:sage [04/10/02 13:26:35] if (...) { // ここにコメント } else { // ここにコメント }
9 名前:デフォルトの名無しさん mailto:sage [04/10/02 13:32:21] >>6 私もそのようにすることを推奨している。
10 名前:デフォルトの名無しさん mailto:sage [04/10/02 13:32:50] >>6 ちなみに、ポインタは int *a; よりも int* a; を推奨している。
11 名前:デフォルトの名無しさん mailto:sage [04/10/02 13:36:22] >>10 変数宣言構文の意味を勉強してから出直しな。
12 名前:デフォルトの名無しさん mailto:sage [04/10/02 13:36:51] >>10 へ? なんで?
13 名前:デフォルトの名無しさん mailto:sage [04/10/02 13:37:03] >>11 出直すのは君の方ね。
14 名前:デフォルトの名無しさん mailto:sage [04/10/02 13:37:50] if( ){ } else if( ){ } else{ } これ、知ってからずっと愛用。 カッコの対応関係が見やすい。
15 名前:デフォルトの名無しさん mailto:sage [04/10/02 13:38:05] まさか int *a; で、aの型は?って聞かれたらint型だなんて言わないよね。
16 名前:デフォルトの名無しさん mailto:sage [04/10/02 13:45:11] if () { hoge; // 詰まってて見にくい } if () { // 空いてて見にくい hoge(); } if () { hoge(); // 安心 }
17 名前:デフォルトの名無しさん mailto:sage [04/10/02 13:48:44] >>10 そういうやつがいるから int* a,b; のbをポインタだと勘違いするやつが出てくるんだよ・・・
18 名前:デフォルトの名無しさん mailto:sage [04/10/02 13:52:41] >>17 だから、 int a, b, c; という書き方はせず、 int a; int b; int c; という風に書くというルールの下、 int* a; int* b; int* c; という風に全て書けばaが何型か明記したことになる。 int *a; int *b; int *c; という書き方はaが何型か明記していない。 ちなみに、このルールから言うと、 int* a,b; という書き方は許されないから、間違うことはない。
19 名前:デフォルトの名無しさん mailto:sage [04/10/02 13:54:24] int*a は a が int* 型だという意味ではなく *a が int 型だということは理解してる?
20 名前:デフォルトの名無しさん mailto:sage [04/10/02 13:57:32] >>19 それは理解しているが、ポインタは用途が違う事が多いので、 扱いを変える必要がある。 ゆえに明記する。
21 名前:デフォルトの名無しさん mailto:sage [04/10/02 14:12:13] >>18 そのルールを守っているプロジェクト内ではそれで完結できるが、 そいつが別のルールの(一行で複数宣言を許す)プロジェクトに移ったとき、 17みたいのを見て勘違いしないか? 文法を理解してないそいつが120%悪いが、世の中出来るやつばかりじゃないからな・・・。
22 名前:デフォルトの名無しさん mailto:sage [04/10/02 14:16:31] >>21 もちろん、int* a;のような記述もコーディングルールの一部だから、 別のルールに従う必要があるときはそのルールに従うべきだよ。 int *a;と書かないといけないルールだったらそうすればよい。
23 名前:デフォルトの名無しさん mailto:sage [04/10/02 14:18:32] 勘違いしててもコンパイラの型チェックで引っかかるんで気づくんじゃない? 引っかからないようなコンパイラ使ってるプロジェクトなら、それこそ「アホはコード触るな」で。
24 名前:デフォルトの名無しさん mailto:sage [04/10/02 14:19:49] だれかemacs用の2chスタイルを定義してください。
25 名前:デフォルトの名無しさん mailto:sage [04/10/02 14:22:41] >>16 でも、そんなお前でもループは while(1){ } とか for(;;){ } だろ?
26 名前:デフォルトの名無しさん mailto:sage [04/10/02 14:27:48] if ( hoge ) { ; } else { ; }
27 名前:デフォルトの名無しさん mailto:sage [04/10/02 14:28:28] >>25 ときどきスペース空けてくれ
28 名前:デフォルトの名無しさん mailto:sage [04/10/02 14:29:30] っていうか、これに従え www.sra.co.jp/wingnut/standards-j_toc.html#Top
29 名前:デフォルトの名無しさん mailto:sage [04/10/02 14:34:38] 俺も昔は>>8 派だったけど、コードコンプリート読んでからぶらさがり型に変えたよ。
30 名前:デフォルトの名無しさん mailto:sage [04/10/02 14:50:52] >>25 Java では if や while もそう書いてるが C++ では全部>>16
31 名前:デフォルトの名無しさん [04/10/02 16:12:35] for (int i=1; i<10; i++) 1+2-3*4/5 ↑ どっちが見やすいですか? ↓ for (int i = 1; i < 10; i++) 1 + 2 - 3 * 4 / 5
32 名前:デフォルトの名無しさん mailto:sage [04/10/02 16:19:08] >>31 for (int i=1; i<10; i++) 1+2-3*4/5 ;
33 名前:デフォルトの名無しさん mailto:sage [04/10/02 16:20:05] >>31 後者
34 名前:デフォルトの名無しさん mailto:sage [04/10/02 16:23:07] >>31 + - の前後はスペース入れる * / の前後は入れない。
35 名前:デフォルトの名無しさん [04/10/02 16:25:45] >>34 それいいな
36 名前:デフォルトの名無しさん mailto:sage [04/10/02 16:27:54] for ( int i = 1; i < 10; i ++ ) 1 + 2 - 3*4/5;
37 名前:デフォルトの名無しさん mailto:sage [04/10/02 16:30:45] f(void) f() どっち? Cでは意味が異なるんだっけ。 C++限定で。
38 名前:10の主治医 mailto:sage [04/10/02 16:32:58] 10=18は重度な精神疾患です 以下処方箋 int* aでもかまわないのですが int* a, b, c; とか書かれるとその人はbやcもint*型と誤解しているのでは?と悪い印象をあたえます 素直に int *a, b, c; と書きなさい
39 名前:デフォルトの名無しさん mailto:sage [04/10/02 16:37:05] 宣言数が少ないならそれでいいけど、その他変数とポインタ変数とは使い道が 違うので、結果的に分けて宣言することが多くなると思う。 ただポインタは全部分けて書くっていうのはちょっとわからん。 > pc5.2ch.net/test/read.cgi/tech/1095180315/971
40 名前:デフォルトの名無しさん mailto:sage [04/10/02 16:39:34] C++だと変数は必要になったタイミングで宣言できるから、 複数まとめて宣言する必要が無いんだよな。
41 名前:デフォルトの名無しさん mailto:sage [04/10/02 16:41:29] Cだってブロック作ればどこにだって宣言できるもん!
42 名前:デフォルトの名無しさん mailto:sage [04/10/02 16:42:12] >>38 全く直されるいわれはない。 これはスタイルの問題であり、開発者がコード見た時により見やすくするためのもの。 一行ごとに一つの変数を定義するというあらかじめ定義されたルールがある以上、 int *a,b,c; なんていう書き方は許さないのだから、当然 int* a,b,c; などとは書けない。 と何度も同じ事を書かないといけないのか? int *a;なんていう書き方の方が全然素直ではない。 int型のポインタとint型を同じ行で定義するのは意味的に良くない。
43 名前:デフォルトの名無しさん mailto:sage [04/10/02 16:43:17] ↑ヴァカ?
44 名前:デフォルトの名無しさん mailto:sage [04/10/02 16:45:23] >結果的に分けて宣言する >int型のポインタとint型を同じ行で定義するのは意味的に良くない まあ要するにこういうことだわな。 たまたま出来るからやりたければやればいいんじゃないのという。
45 名前:デフォルトの名無しさん mailto:sage [04/10/02 16:46:53] int a, b, c; と宣言しておいて aは使う段階になったら *(int *)a とする これで完璧
46 名前:600 mailto:sage [04/10/02 16:46:55] int *a = NULL; *a がintなのにNULLで初期化というのも妙だしな。 int* a = NULL; ならばしっくりくる。
47 名前:デフォルトの名無しさん mailto:sage [04/10/02 16:47:55] >>44 >>42 と>>39 をいっしょにするなよ >>39 はポインタ変数の役割が他のIntと違うから別個に宣言すると言ってるだけ >>42 のほうは int と int* が別物だと考えている
48 名前:デフォルトの名無しさん mailto:sage [04/10/02 16:49:02] >>47 全く理解できない それより、病院いけ?
49 名前:デフォルトの名無しさん mailto:sage [04/10/02 16:50:55] 46=47 そんな理解でC/C++使わないでくれ
50 名前:600 mailto:sage [04/10/02 16:51:52] >>49 >46=47 そんな理解でレスしないでくれ
51 名前:デフォルトの名無しさん mailto:sage [04/10/02 16:56:47] とりあえず >>43 ,48,49 はトリップつけてよ。 面倒だから。
52 名前:デフォルトの名無しさん mailto:sage [04/10/02 17:00:32] >>int* a; えー?! じゃ、関数ポインタは int(*) a(void) = NULL; って書くんですか?
53 名前:デフォルトの名無しさん mailto:sage [04/10/02 17:04:37] 「変数名」と「他のもの」は離して書くよ。 関数ポインタならこうする int (* fncptr)(void) = NULL;
54 名前:デフォルトの名無しさん mailto:sage [04/10/02 17:09:08] >>53 > 「変数名」と「他のもの」は離して書くよ。 じゃあ int * a; って書けばいいんじゃない?
55 名前:デフォルトの名無しさん mailto:sage C99は… [04/10/02 17:11:54] CとC++ならスタイルも変わってくると思う Cなら int *a, *b, *c; C++なら使うときにひとつずつ int* a = new int(hoge);
56 名前:デフォルトの名無しさん mailto:sage [04/10/02 17:18:18] >>50 で、君はどこスレの600?
57 名前:デフォルトの名無しさん mailto:sage [04/10/02 17:25:22] >>56 バカ、このスレの未来から来たんだよ。
58 名前:デフォルトの名無しさん mailto:sage [04/10/02 17:28:33] もしかしてドライもんのおともだちだったりするんだ…
59 名前:デフォルトの名無しさん mailto:sage [04/10/02 18:39:00] int a = val; を int a; と a = val; を一緒にした書き方の延長線上で見てしまうと、 int *a = ptr; が int *a; と *a = ptr; では、辻褄が合わなくなるので、 int* a = ptr; と書くようにすることで、 int* a; と a = ptr; が 最初のと同様の見方が出来るからじゃないの? 宣言時の *a と 代入時の *a では 括弧を省略できるため見た目同じでも 意味するところは異なるのが原因だと思うけど... 代入時は *(a) とでもする?
60 名前:デフォルトの名無しさん mailto:sage [04/10/02 18:51:41] int* a, b, c;
61 名前:デフォルトの名無しさん mailto:sage [04/10/02 18:59:02] >>59 >宣言時の *a と 代入時の *a では >括弧を省略できるため見た目同じでも >意味するところは異なるのが原因だと思うけど... アフォ。 ではこれをどう説明するんだよ。 int a[] = {123, 345, 567};
62 名前:デフォルトの名無しさん mailto:sage [04/10/02 19:35:01] 今時int *aなんて書いてるのはおっさんCプログラマでしょ。 C++の勉強のためにWebでいろんなコード見てきたけど、ほとんどint* aだよ。 参照もint &aなんて書いてるのかな?
63 名前:デフォルトの名無しさん mailto:sage [04/10/02 19:59:00] 昔はint* aだったけど最近はint *aにするようにしてる 昔は単純なプログラムしか組めなかったからどっちでもよかったけど constとか関数ポインタ、多重ポインタとか使うようになるとint *aのほうが都合がよくなる
64 名前:デフォルトの名無しさん mailto:sage [04/10/02 20:54:19] int * a; 最強。
65 名前:デフォルトの名無しさん mailto:sage [04/10/02 20:58:59] const int*と int const*って違いがよく分からん
66 名前:デフォルトの名無しさん mailto:sage [04/10/02 21:12:49] a[b]とb[a]の違いみたいなもんだ。 俺はint constだけど、世間一般ではconst intのほうが主流かな。
67 名前:デフォルトの名無しさん mailto:sage [04/10/02 21:31:14] constの位置が違うと全然違う意味だから
68 名前:デフォルトの名無しさん mailto:sage [04/10/02 21:34:13] >>67 ( ・∀・)ニヤニヤ
69 名前:デフォルトの名無しさん mailto:sage [04/10/02 21:41:47] char *const char const*
70 名前:デフォルトの名無しさん mailto:sage [04/10/02 21:42:38] 最強は char const * const
71 名前:デフォルトの名無しさん mailto:sage [04/10/02 21:44:38] 最強はvoid const*だろ
72 名前:デフォルトの名無しさん [04/10/02 21:48:03] int *a,b,c; 決定
73 名前:デフォルトの名無しさん mailto:sage [04/10/02 22:59:11] >>70 > 最強は > char const * const だな。const char * const だと、どうしてよ?って思っちゃうし。
74 名前:デフォルトの名無しさん mailto:sage [04/10/03 01:04:37] 突然ですが、三項演算子 (cond) ? foo : bar; です。ハテナとコロンは揃えます。 いじょ。
75 名前:デフォルトの名無しさん mailto:sage [04/10/03 01:08:22] 3項演算子って結局はif文と同じコンパイル結果になるから、一行で書かないなら if文で書いた方がわかりやすいと思う。 3項演算子の利点は一行で最小限の文字数で書けるところだと思っているけれど。。
76 名前:デフォルトの名無しさん mailto:sage [04/10/03 01:13:19] 俺もそう思う。
77 名前:デフォルトの名無しさん mailto:sage [04/10/03 01:24:24] if-else文と違って値を返すのが三項演算子の特徴なんじゃないの? フロー制御だけならif-elseでいいけど。
78 名前:デフォルトの名無しさん mailto:sage [04/10/03 01:27:58] 値を返すならなおさら一行で書かないとややこしくなる気がする…
79 名前:74 mailto:sage [04/10/03 01:47:19] 失礼。値は返します。 一列だと コロン が埋もれてしまい見た目に探すのがつらいです。 (異論あるんだろーな。。)
80 名前:デフォルトの名無しさん [04/10/03 01:59:37] >>74 > です。ハテナとコロンは揃えます。 演算子の記号が行先頭にくるように改行するのはGNUコーディングスタンダードの 条件文の書き方に通じるものがあるね。 if (condA && condB && condC) ってやつ。
81 名前:デフォルトの名無しさん [04/10/03 08:02:51] >>42 > int型のポインタとint型を同じ行で定義する 間違い。 >>45 最悪。
82 名前:デフォルトの名無しさん [04/10/03 09:03:09] >>45 最高。
83 名前:デフォルトの名無しさん [04/10/03 09:17:54] >>77 禿同 値を使わないのなら三項演算子ではなく if-else を使うべし。 値を使う場合、if-else で書いた場合についても考えてみて、 複雑さが同程度だったら if-else を使う方が好ましい。
84 名前:デフォルトの名無しさん mailto:sage [04/10/03 09:31:48] 代入する値をわける場合とか、 if だと分岐したとき代入し忘れがあって怖い。 ?:なら確実に代入できるので極力?:にしてる。 長くなりそうなら関数に抜き出して?:でディスパッチする。 checkstyle で使うなと起こられるのがつらい。
85 名前:デフォルトの名無しさん [04/10/03 09:49:14] printf("....%c", .... eol?'\n':','); みたいな使い方は?
86 名前:デフォルトの名無しさん mailto:sage [04/10/03 10:03:58] >>85 便利だよねえ。
87 名前:デフォルトの名無しさん mailto:sage [04/10/03 10:18:19] 三項演算子使わないとreturnが増殖したりする所で使わないのはアフォだ
88 名前:デフォルトの名無しさん mailto:sage [04/10/03 10:20:01] 引数が長いときは rhs.assign( make_transform_iterator(lhs.begin(), thef) , make_transform_iterator(lhs.end() , thef));←最後の「);」これをここにいつも書いてんだけどどうよ? vector< vector<int> >←「vector<int>>」のエラー対策の為に空けるスペースを先頭にも空けるて揃えるのがお気に入り。
89 名前:デフォルトの名無しさん mailto:sage [04/10/03 10:23:41] 漏れなら rhs.assign ( make_transform_iterator(lhs.begin(), thef), make_transform_iterator(lhs.end() , thef) );
90 名前:デフォルトの名無しさん mailto:sage [04/10/03 10:24:40] でも引数2個くらいなら rhs.assign(make_transform_iterator(lhs.begin(), thef), make_transform_iterator(lhs.end() , thef));
91 名前:デフォルトの名無しさん mailto:sage [04/10/03 10:41:10] ぶっちゃけ、*の位置や改行なんかどうでもいい。 変数・関数名やスコープの最小化のほうが重要。
92 名前:88 mailto:sage [04/10/03 10:44:01] >>89 最初そう書こうかなと考えたこともあったんだけど やたらと空白が目立って全体を眺めたら関数名との繋がりが希薄にかんじて・・・・却下したんですよね。 >>90 それでも悪くは無いんですけど、 make_の開始位置が上と下じゃ揃わないから途中から書くのをやめました。ここじゃズレてましたけど・・・ 最後の「));」を「) );」こうしてもいいですけどなんかしっくりこないんですよね。 じゃ改行か?と言ったら>>89 に言ったような美徳センスが付きまとっていまいちなんですよね。 やっぱり個人差なのかな。
93 名前:デフォルトの名無しさん mailto:sage [04/10/03 10:45:52] >>91 お前はナ。
94 名前:デフォルトの名無しさん mailto:sage [04/10/03 10:53:17] ttp://www.01-tec.com/document/code_design/vol01.html ここを参考にしながら書くのがよろしいかと
95 名前:デフォルトの名無しさん mailto:sage [04/10/03 10:55:46] >>94 に書いてあった ブラケットでスコープわけって普通に使われてんの? func() { { int a, b; } { int c; } }
96 名前:デフォルトの名無しさん mailto:sage [04/10/03 11:10:26] >>95 俺は普通に使ってるけど
97 名前:デフォルトの名無しさん mailto:sage [04/10/03 11:12:46] 私もふつうに使っていますよ
98 名前:デフォルトの名無しさん mailto:sage [04/10/03 11:16:30] ほんとだ。スコープ分けてるYo。 96 名前:デフォルトの名無しさん[sage] 投稿日:04/10/03(日) 11:10:26 >>95 俺は普通に使ってるけど 97 名前:デフォルトの名無しさん[sage] 投稿日:04/10/03(日) 11:12:46 私もふつうに使っていますよ
99 名前:デフォルトの名無しさん mailto:sage [04/10/03 11:16:46] わたくしも使っております (21歳 家事手伝い)
100 名前:デフォルトの名無しさん mailto:sage [04/10/03 11:17:22] また山崎か。
101 名前:デフォルトの名無しさん mailto:sage [04/10/03 11:18:43] >>95 普通だけど、私は使っていない
102 名前:デフォルトの名無しさん [04/10/03 12:39:59] クラシックCの場合 int get_hoge_fuge(args...) みたいな関数の命名ですが、特にget,setで始まる場合は アンダースコア _ 入れるかどうか迷うんですよね。 私はいちおう「入れる派」なんですが ライブラリにあるやつとか ex.) getchar, gethostbyname, ... のきなみ続けて次の単語書いちゃってるし、 外は雨降りだし、Javaの人はいいなぁって思う今日この頃。
103 名前:デフォルトの名無しさん mailto:sage [04/10/03 12:52:27] getHogeFugeって書けば解決
104 名前:デフォルトの名無しさん mailto:sage [04/10/03 12:56:21] Shift同時押しは微妙にタイプ速度を下げるので大文字禁止、アンダーバーも禁止。 括弧は仕方が無いがもっと打ちやすいところにほしい。
105 名前:デフォルトの名無しさん mailto:sage [04/10/03 12:59:47] >>104 シフトキーを使うのも億劫になる程の タイピング量が必要になるコードの方を まずは禁止すべきだな。
106 名前:デフォルトの名無しさん mailto:sage [04/10/03 13:34:56] >>103 ラクダ記法はJavaコーディングスタイルだったっけ。
107 名前:デフォルトの名無しさん mailto:sage [04/10/03 13:40:37] コメントの /* * */ と /* * */ どっち? アスタリスクが縦に揃うほうがいいなあ。
108 名前:デフォルトの名無しさん mailto:sage [04/10/03 13:48:33] >>107 CやC++ではDoxygenに対応したコメント記法をするのが良いと思います。 後でDoxygenにかけることも考慮して。
109 名前:107 mailto:sage [04/10/03 13:57:08] >>108 doxygenって初めて知ったよ! いいじゃん! 俺もこれからそうする!!
110 名前:デフォルトの名無しさん [04/10/03 14:24:57] >>107 /* comment */ Doxygen なら /*! \brief comment */
111 名前:デフォルトの名無しさん mailto:sage [04/10/03 14:25:25] スペースが抜けてた /* comment */ Doxygen なら /*! \brief comment */
112 名前:デフォルトの名無しさん mailto:sage [04/10/03 14:29:41] doxygenはjavadocスタイルの方が宮須行きがする。 \や!より@の方が目に優しい気がするような気がしないでもないかもしないかな、という気がした気がした。
113 名前:デフォルトの名無しさん mailto:sage [04/10/03 15:00:36] 自分も@派。 JISだと'¥'になるのが悪いのかな。 '\'なら'/'との組み合わせで見やすいのかも。
114 名前:デフォルトの名無しさん mailto:sage [04/10/03 15:06:34] 日本以外の人たちって \ が \なんだよな・・・。 目立たないし、文字列のなかでエスケープに使われてると激しく見にくくないかな・・・。
115 名前:デフォルトの名無しさん mailto:sage [04/10/03 15:28:36] >>114 慣れるとそうでもない。TeXとか使っていると\の方が違和感があるかも
116 名前:デフォルトの名無しさん mailto:sage [04/10/04 01:52:56] visualC++もバックスラッシュだよね(?) 確か...?
117 名前:デフォルトの名無しさん mailto:sage [04/10/04 17:15:41] \よりもバックスラッシュのが好きだなあ。 特にパスの区切り文字としては見た目、\より直感的な気がします。 Win では \\ の代わりに / もパスの区切り文字として 使えるんですよね。タイプが楽だし気に入っているんだけど ソースのポータビリティを考えたら、使わんほうがいいんでしょうね…。
118 名前:デフォルトの名無しさん mailto:sage [04/10/04 17:50:38] >>117 一部のAPI(PathXXX系)が対応してないから使わないほうが無難だね。 Perlとかだと /\r\n/\n/ とか読みにくくね?
119 名前:デフォルトの名無しさん mailto:sage [04/10/04 20:35:15] 別に読みにくくないよ? 日本のユーザ以外は皆バックスラッシュなわけだし。 むしろ、¥に慣れた人が英語情報を見るとそんなとこでもひっかかったりして 余計にとっつきが悪くなるんじゃないかと変な心配してしまうんだけど。 Unicodeで文字コード世界統一のはずなのに、日本だけ世界と一部違うものが Unicodeとされているというのもなんだか悲しいよう。
120 名前:デフォルトの名無しさん mailto:sage [04/10/04 21:11:37] 為替レートとか外国で表示するとき\どうしてんだろう?
121 名前:デフォルトの名無しさん mailto:sage [04/10/04 21:25:59] 大体の場合0xA5がYEN SIGNだから、
122 名前:デフォルトの名無しさん mailto:sage [04/10/04 22:07:37] 今に至っては\の役割はもう無いね。 これからはバックスラッシュに変えていくべきだと思うんだけど。
123 名前:デフォルトの名無しさん mailto:sage [04/10/05 02:24:18] Unicode? たんにフォントの問題だろ
124 名前:デフォルトの名無しさん mailto:sage [04/10/05 02:28:44] 文字集合。
125 名前:デフォルトの名無しさん mailto:sage [04/10/05 04:33:16] 0x5CがYEN SIGNとして使われてしまうのはフォントの問題では済まないよ。 そのように使われないならその問題なくて 「日本人はなぜかバックスラッシュが見たくもないほど嫌いらしい。 どれくらいかというとバックスラッシュの代わりに円記号を表示させるくらい 嫌いらしい。」という程度の話になるけど。
126 名前:デフォルトの名無しさん mailto:sage [04/10/05 05:53:06] アホですな。
127 名前:デフォルトの名無しさん mailto:sage [04/10/22 02:31:16] みなさん、キャストは、 static_cast とか、reinterpret_cast とか、使ってますか? C++的に言えば、使った方がいいんだが、どう考えてもCキャストのほうが読みやすい。
128 名前:デフォルトの名無しさん mailto:sage [04/10/22 03:41:06] 使ってはいる。けれども同意。
129 名前:デフォルトの名無しさん mailto:sage [04/10/23 02:08:15] >>127 Cスタイルキャストは禁止してる。 理由は以下のとおり。 ・Cスタイルキャストは強力すぎる ・Cスタイルキャストは見つけにくすぎる ・Cスタイルキャストは dynamic_cast できない ちなみに、どう考えたらCスタイルキャストのほうが読みやすいことになるのかわからない。
130 名前:デフォルトの名無しさん mailto:sage [04/10/23 02:47:22] 書きにくいってのならわかるね。 字数多いし。むしろ書きにくいから(ry
131 名前:デフォルトの名無しさん mailto:sage [04/10/23 09:23:45] Cスタイルキャストに警告を出すコンパイラってあるかね?
132 名前:デフォルトの名無しさん mailto:sage [04/10/23 11:17:07] あるよ。
133 名前:デフォルトの名無しさん mailto:sage [04/10/26 23:47:46] dynamic_castをほとんど使ったことがない俺は たぶん何か間違ってるんだと思う。
134 名前:デフォルトの名無しさん mailto:sage [04/10/26 23:54:04] >>133 そんなことないと思う。 C++ の危険な領域に入り込んでいない健全な姿だよ。
135 名前:デフォルトの名無しさん mailto:sage [04/10/27 01:16:55] キャストなんて使わないで済ますのが一番。 dynamic_cast の出番は、時間さえあれば設計を見直すべきところがほとんど。
136 名前:デフォルトの名無しさん [04/11/17 15:23:26] protected データ メンバを宣言してはいけない ------------------------------------------------------------ ルールの理由: private ではなくprotected としてデータ メンバを宣言すると、 メンバ関数中にカプセル化できたはずのメンバが派生クラスから見えてしまいます。 例 // // protected データ メンバを宣言してはいけない // class A { protected: int i; // 違反 };
137 名前:デフォルトの名無しさん mailto:sage [04/11/17 16:08:10] >>136 素人でつか?
138 名前:デフォルトの名無しさん mailto:sage [04/11/17 16:21:57] >>136 「俺様ルールの違反」とちゃんと書け。
139 名前:デフォルトの名無しさん [04/11/17 16:40:47] コンストラクタから直接グローバル データにアクセスしてはいけない -------------------------------------------------------------------------------- ルールの理由: 異なるコンパイル単位中の静的オブジェクトの初期化順序は、 C++ の言語定義では定義されていません。 そのため、コンストラクタからグローバル データへのアクセスは、 未初期化オブジェクトからの読み取りになる場合があります。 例 // // コンストラクタから直接グローバル データにアクセスしてはいけない // int a; class A { public: A(); private: int b; }; A::A() { b = a; // 違反 }
140 名前:デフォルトの名無しさん mailto:sage [04/11/17 21:16:46] かわいく書く。 for(i=0; i<100; i++){ // 100回がんばる }
141 名前:デフォルトの名無しさん mailto:sage [04/11/17 21:37:06] かわいくに反応して“がんばる”が…くそっ俺の脳みそがぁぁ かわいいじゃねぇか
142 名前:デフォルトの名無しさん [04/11/17 22:25:44] >>129 const void *p; const_cast<int *>(static_cast<const int *>(p)); こんなんだったらCスタイルキャストの方が読みやすいかもしれない
143 名前:デフォルトの名無しさん mailto:sage [04/11/17 22:31:40] >>129 画像演算とか。 一つの式中にキャストが10個くらい現れたりする。 C++キャストでは長すぎて意図が分からなくなってしまう。 const_castはさすがにCキャストで代用しようとは思わないが、 PODに対するreinterpret_castやstatic_castはCキャストのほうが分かりやすい時もある。
144 名前:デフォルトの名無しさん mailto:sage [04/11/18 00:54:49] >>142-143 カッコ悪いプログラムがカッコ悪いソースになる。それがいいんじゃねぇか。
145 名前:デフォルトの名無しさん mailto:sage [04/11/18 03:37:33] >>139 いずれにしても a の初期化し忘れ。
146 名前:デフォルトの名無しさん mailto:sage [04/11/18 10:06:12] >>145 aは0で初期化される
147 名前:デフォルトの名無しさん [04/11/19 23:20:36] コボラーと大してレベル変わらんなお前ら
148 名前:デフォルトの名無しさん [04/11/19 23:52:23] int *a, *b; // ポインタ int a, b; これ最強
149 名前:デフォルトの名無しさん [04/11/20 20:28:56] C++ の const Class & や Class* は必ず typedef してから使う。 typedef const Class & ClassRef; typedef Class* ClassPtr;
150 名前:デフォルトの名無しさん mailto:sage [04/11/21 06:52:22] >>149 ウザ
151 名前:デフォルトの名無しさん mailto:sage [04/11/21 10:12:08] 二重インクルードヘッダーは、 "__" + プロジェクト名+ファイル名 にする。 【例】 HelloWorld プログラムの Hello.h ファイルは、 #ifndef __HELLOWORLD_HELLO_H #define __HELLOWORLD_HELLO_H ... #endif とする。
152 名前:デフォルトの名無しさん mailto:sage [04/11/21 10:33:02] 何が言いたいんだ…? 文句を言いたいのか、上記のように統一しろと主張しようとしてるのかわからんぞ
153 名前:デフォルトの名無しさん mailto:sage [04/11/21 10:46:19] >>151 ISO/ANSI規格では識別子の初めに _ が2つ続く物はコンパイラ・ライブラリ関数のために予約されているので駄目だ。
154 名前:デフォルトの名無しさん mailto:sage [04/11/21 11:27:42] >>153 "_" がふたつだけじゃなくて、ひとつでも予約されてるんじゃなかったっけ? (つまり "_" で始まる名前はすべて標準ライブラリ用に予約されてる)
155 名前:デフォルトの名無しさん mailto:sage [04/11/21 11:51:19] 漏れのインクルードガードは、ファイル名 (ピリオドを '_' に 変換したもの) + '_' だな。大文字/小文字はそのまんまだ。 #ifndef MotherHacker_h_ #define MotherHacker_h_ ここで気になるのが #endif なんだけど a. #endif // !MotherHacker_h_ ( '!' あり ) b. #endif // MotherHacker_h_ ( '!' なし ) c. #endif ( なんもなし ) てめーらはどれ派? 漏れは昔は c.,以前は b. だった。でも今は a. 派。
156 名前:デフォルトの名無しさん mailto:sage [04/11/21 12:10:00] 漏れは #ifndef MOTHER_HACKER_H__ #define MOTHER_HACKER_H__ #endif// MOTHER_HACKER_H__ 最後の_が2つなのがミソ
157 名前:デフォルトの名無しさん mailto:sage [04/11/21 12:38:30] >>154 本当だ。 今まで'_'の次に英大文字か'_'の場合だけが予約かと思っていた
158 名前:158=157=153 mailto:sage [04/11/21 12:41:55] >>156 インクルードガードのときだけ例外的にb派。 #ifdef HOGEに対しては#endif // defined HOGEとしている。
159 名前:デフォルトの名無しさん mailto:sage [04/11/22 00:07:48] 漏れは #endif // !defined( _suffix_hoge_h_included_ )
160 名前:デフォルトの名無しさん mailto:sage [04/11/22 02:18:33] 漏れは//にスペース入れない #ifndef MotherHacker_h_ #define MotherHacker_h_ #endif//MotherHacker_h_ なぜって識別子の位置が揃うから
161 名前:デフォルトの名無しさん mailto:sage [04/11/22 03:21:50] >>160 > なぜって識別子の位置が揃うから うーん、気持はわからなくはないけど。 #elseや#endifに条件式をコメントとして入れとくのは、そもそも#ifの位置が 遠く離れてて把握できなくても条件式をすぐに理解できるようにするためでしょ? そんな状況なら桁の位置が揃ってるかどうかなんて、どうでもいいと思うんだけど。 桁揃えが気になるような距離なら、そもそも条件式をコメントに書かなくてもいいし。
162 名前:デフォルトの名無しさん [04/11/22 10:14:40]
163 名前:デフォルトの名無しさん mailto:sage [04/11/23 17:04:27] >>156 残念だがそのミソは予約されている。
164 名前:デフォルトの名無しさん mailto:sage [04/11/23 20:52:14] 【規約】 プリプロセッサ命令は #if や #ifdef の中ではインデントさせる。 ただし # は必ず行頭に配置せよ。 例: #ifdef HOGE # include <hoge.h> # ifdef FOO # #include <foo.h> #endif #endif
165 名前:デフォルトの名無しさん mailto:sage [04/11/23 20:56:26] >>164 なんで?なんかいいことあるの?
166 名前:デフォルトの名無しさん mailto:sage [04/11/23 20:57:35] 入れ子が複雑になっても、読みやすい、修正しやすい。 入れ子をベタで書くのはよくない作法だろ。
167 名前:デフォルトの名無しさん mailto:sage [04/11/23 21:07:49] >>164 ↓こんなんも、#だけ行頭に動かすの? { while(...) { if(...) { #if HOGE ...; #endif ...; } } }
168 名前:デフォルトの名無しさん mailto:sage [04/11/23 23:12:29] 1カラム目以外に'#'があるとディレクティブと見做さないコンパイラがあったなぁ。
169 名前:デフォルトの名無しさん mailto:sage [04/11/24 19:40:17] 基本的に if 文は>>5 のスタイルで書いているがキモいのか・・・? >>7 や>>14 も嫌いではない。
170 名前:デフォルトの名無しさん [04/11/24 20:01:33] 俺は14の方がキモいと思う。 同じく普段は5を使っているが、行数制限があるときは7スタイルも使う。
171 名前:デフォルトの名無しさん mailto:sage [04/11/24 20:04:22] このあたりはもう好みの問題でしょ。 個人的には>>14 で書いてる。 >>5 は、if の次に { だけの行がくるのがスカスカな感じでちょっといや。
172 名前:デフォルトの名無しさん [04/11/24 22:49:23] >>5 のスタイルの方がネストしたときの括弧の対応がわかりやすいと思うけどなぁ・・・ Windows 2000 のコードとか、FFFTP なんかは、 >>5 のスタイルで書かれてるね まぁ、>>14 の書き方でも絶対に間違わないって言う地震があるのならいいんじゃないの 好みの問題
173 名前:デフォルトの名無しさん mailto:sage [04/11/24 22:51:59] 私は>>7 だな。
174 名前:デフォルトの名無しさん mailto:sage [04/11/25 13:50:53] つまり>>5 のやつが言葉を間違えたんだろ。キモイは言いすぎ。好みの問題でしかない。 俺は>>14 だが。
175 名前:デフォルトの名無しさん mailto:sage [04/11/25 20:13:12] >>14 はなんだか中途半端な気がして、気持ち悪い。 なんか、切れそうで切れない生首のような、ほとんど首無しニックのような、気持ち悪さ。
176 名前:デフォルトの名無しさん mailto:sage [04/11/26 14:38:36] >>5 使ってるよ。
177 名前:デフォルトの名無しさん mailto:sage [04/11/26 14:52:04] >5も好きじゃないんだが、 if (...) { ...; } else { ...; } って書かれるとどうもね。 #2段も下げるなって感じ?
178 名前:デフォルトの名無しさん mailto:sage [04/11/26 14:59:41] >>177 GNUスタイルですな。慣れればいいのかもしれないが、 俺は>>7 でタブは8カラム。以前までタブでなくスペース派 だったんだが、今はまあいいかなと思えるようになった。 タブを行頭にしか使わなければ環境依存も(ある程度) 許容できるし。
179 名前:デフォルトの名無しさん mailto:sage [04/11/26 17:58:51] TABを使ったソースを別の環境で見たときに見た目が違うということがあっても 別に大した問題ではないだろう。 TABをスペースに置き換えるなんてエディタの機能で一発だったりするでしょ。 手間は大したこと無いから全然気にしないで、自分の環境で一番やりやすいやりかた ですれば良いと思うよ。
180 名前:デフォルトの名無しさん [04/11/29 23:35:29] CodeWizard とかの静的解析ツール使えばいいんじゃないの
181 名前:デフォルトの名無しさん mailto:sage [04/11/30 01:45:33] 流儀違うとCVSに落としたりするとき困るよな 全部2TAB→スペース変換してコミット
182 名前:デフォルトの名無しさん mailto:sage [04/12/02 00:19:30] >>45 は *(int *)&a じゃないのか?
183 名前:デフォルトの名無しさん mailto:sage [04/12/02 08:39:54] >>182 それじゃ a と同じになっちゃうだろ。
184 名前:デフォルトの名無しさん mailto:sage [04/12/02 18:12:23] 長いprintfのカンマは左側に書く。 printf( "compless : %s\n" "code : %xh\n" "codesize : %xh\n" "entry offset : %xh\n" "begin offset : %xh\n" "end offset : %xh\n" ,isompless?"true":"false" ,code ,codesize ,main_entry ,begin_entry ,end_entry );
185 名前:デフォルトの名無しさん mailto:sage [04/12/02 18:56:09] printfに限らず俺はインデントした上で右側にカンマ付けるけどな。 こうしている人の方が多いと思っているし。
186 名前:デフォルトの名無しさん mailto:sage [04/12/03 18:44:42] 継続行はCodeCompleteに倣って演算子を右に書く。 全体はApacheスタイルに近い。 タブは4カラムで、スペースじゃないけど。
187 名前:デフォルトの名無しさん mailto:sage [04/12/08 09:12:31] ここは重複スレです Cのマナーいろいろ pc5.2ch.net/test/read.cgi/tech/1029584140/
188 名前:デフォルトの名無しさん [04/12/08 09:17:24] >>187 仕切り厨ウザイ
189 名前:デフォルトの名無しさん mailto:sage [04/12/08 09:31:06] こいつぼけ
190 名前:デフォルトの名無しさん mailto:sage [04/12/08 10:21:59] >>189 おまえがな。
191 名前:デフォルトの名無しさん [04/12/13 04:22:13] voidで返す関数はreturn書く?
192 名前:デフォルトの名無しさん mailto:sage [04/12/13 04:35:34] voidで返す?
193 名前:デフォルトの名無しさん mailto:sage [04/12/13 04:49:17] C++ならreturn void;
194 名前:デフォルトの名無しさん mailto:sage [04/12/13 04:50:45] 返り値がvoidならreturnは省略した方がコードが短くなって読みやすくなると思うんだけど。
195 名前:デフォルトの名無しさん mailto:sage [04/12/13 05:17:00] そもそも値を返さないのがvoid
196 名前:デフォルトの名無しさん mailto:sage [04/12/13 22:29:28] >>191 条件 return の場合以外書かない。
197 名前:デフォルトの名無しさん [04/12/16 23:24:30] >>191 関数であると明確にするために、書いておく。
198 名前:デフォルトの名無しさん mailto:sage [04/12/16 23:25:42] 関数以外のものがあるわけじゃないのに…
199 名前:デフォルトの名無しさん mailto:sage [04/12/16 23:47:17] pascalの癖が抜けないんだろう
200 名前:197 [04/12/17 03:16:35] >>199 悪いが、Pascalなんぞやったことないんだが。
201 名前:デフォルトの名無しさん mailto:sage [04/12/17 03:24:20] >>200 無学を自慢するな
202 名前:デフォルトの名無しさん mailto:sage [04/12/17 03:25:12] じゃ、VBか。
203 名前:デフォルトの名無しさん mailto:sage [04/12/17 03:26:55] そもそも返り値がvoidの関数を作る事自体が間違えなんじゃないの? 処理は全部副作用だけなんて…
204 名前:197 [04/12/17 03:33:40] >>201 どこがどう自慢だったんだね? むしろ謝っているとしか言えないが。
205 名前:デフォルトの名無しさん mailto:sage [04/12/17 03:38:25] >>204 石黒級の馬鹿だな。まず日本語をなんとかしろよ。
206 名前:デフォルトの名無しさん mailto:sage [04/12/17 03:46:05] >>205 何か日本語の使い方でおかしいところなんてあったか? お前こそなんとかして反論しようとして 無理やり絞り出したようにしか見えんな。
207 名前:デフォルトの名無しさん mailto:sage [04/12/17 03:57:40] もまいらもちつけ
208 名前:デフォルトの名無しさん mailto:sage [04/12/17 04:03:40] 低級な言い合いは止めてくれ
209 名前:デフォルトの名無しさん [04/12/17 04:16:36] アセンブリはやっておくべきだよ
210 名前:デフォルトの名無しさん mailto:sage [04/12/17 04:21:58] >>209 うまい
211 名前:デフォルトの名無しさん mailto:sage [04/12/17 05:33:41] mov ax, 4c00h int 21h
212 名前:デフォルトの名無しさん mailto:sage [04/12/17 05:42:25] >>206 それ本気で言ってる? もう必死すぎだなw
213 名前:デフォルトの名無しさん mailto:sage [04/12/17 07:24:00] >>212 あまり強く言いすぎると、釣りってことにして逃げちゃって興醒めだよ。 真綿で首を絞めるみたいにイジらないと。
214 名前:デフォルトの名無しさん mailto:sage [04/12/17 09:20:59] >>213 多分それ以前に>>212 が釣りなんでは
215 名前:デフォルトの名無しさん mailto:sage [04/12/17 09:21:21] そういうことは真綿で首を絞めてから言ってくれ。
216 名前:デフォルトの名無しさん mailto:sage [04/12/17 09:38:18] 日本語って言うならおれは>>203 が気になるな。他でも見るが 「間違い」だろ?
217 名前:デフォルトの名無しさん mailto:sage [04/12/17 12:06:40] >>216 本人だが同意
218 名前:デフォルトの名無しさん mailto:sage [04/12/17 12:22:36] >>217 単純にtypo?
219 名前:デフォルトの名無しさん mailto:sage [04/12/17 19:49:43] 「Pascal やったことないと無学」ってことにしたい >>201 が キチガイだったということで。
220 名前:!=201 mailto:sage [04/12/17 22:41:14] そりゃ無学だろ
221 名前:デフォルトの名無しさん [04/12/17 23:06:33] www.page.sannet.ne.jp/mtoga/lang/c/text/bih-c_tf.txt たまたま見つけた最悪なコードの見本。
222 名前:デフォルトの名無しさん mailto:sage [04/12/17 23:09:32] アセンブラやったことないよ パスカルやったことないよ スクイークやったことないよ シーシャープやったことないよ セックルやったことないよ 一番ダメなプログラマーはどれ?
223 名前:& ◆QWv3R1XL8M [04/12/17 23:11:52] 15日C++とSTLとテンプレ使えるようになる苦行教えてくれ。 耐えて、使えるようになりたい。
224 名前:デフォルトの名無しさん mailto:sage [04/12/17 23:12:25] >>223 AC++というつまらない本を熟読する
225 名前:デフォルトの名無しさん mailto:sage [04/12/17 23:24:40] >>222 パスカルやったことないよ
226 名前:デフォルトの名無しさん mailto:sage [04/12/17 23:38:50] Ruby知らないというのは致命的・
227 名前:デフォルトの名無しさん mailto:sage [04/12/17 23:43:08] >>224 MC++ はどう?
228 名前:デフォルトの名無しさん mailto:sage [04/12/18 01:10:52] pascalが何の単位か分からない奴は無学
229 名前:デフォルトの名無しさん mailto:sage [04/12/18 01:32:21] ヘクトパスカル?
230 名前:デフォルトの名無しさん mailto:sage [04/12/18 01:35:44] >>229 メガバイトって言っているのと同じだよ
231 名前:874 mailto:sage [04/12/18 15:54:20] >#define unint unsigned int /* 型名の 別名を定義します。 */ >#define unlong unsigned long ワロタ
232 名前:デフォルトの名無しさん mailto:sage [04/12/18 16:16:00] >>221 、>>231 のサイトって、中学生に教えている積もりなのか? 余りに痛々しいんだが。
233 名前:デフォルトの名無しさん [04/12/21 00:22:46] k
234 名前:デフォルトの名無しさん mailto:sage [04/12/21 00:47:17] switch〜caseのインデントってどうしてる? 俺は switch(n){ case 0: cout << "0" << endl; break; default: break; } caseとswitchのインデントレベルは同じにしてるけど。
235 名前:デフォルトの名無しさん [04/12/21 02:55:19] >>234 タブを4として、スペース2個を入れる。
236 名前:デフォルトの名無しさん mailto:sage [04/12/21 04:57:49] >>235 K&Rと同じにしてる。 つまり同じレベル。
237 名前:デフォルトの名無しさん mailto:sage [04/12/21 06:01:18] 同じにしてる。 基本的にインデントが一気に2段下がることが無いように頑張っている
238 名前:デフォルトの名無しさん mailto:sage [04/12/22 00:36:28] 俺は>>235 と同じだな。
239 名前:デフォルトの名無しさん mailto:sage [04/12/24 15:14:41] switch(n) { case 0: cout << "0" << endl; break; default: break; }
240 名前:デフォルトの名無しさん mailto:sage [04/12/24 17:47:57] 俺はこう。 switch (n) { case FOO: foo(); break; case BAR: { int x = bar(n); baz(x); break; } default: /* NEVER REACH HERE */ abort(); }
241 名前:デフォルトの名無しさん mailto:sage [04/12/24 18:45:23] switch (n) { case FOO: foo(); break; case BAR { int x = bar(n); baz(x); break; } } 俺のスタイル。
242 名前:デフォルトの名無しさん mailto:sage [04/12/25 13:37:04] switch (n) { case FOO: foo(); break; case BAR {int x = bar(n); baz(x); break; } } 俺のスタイル。
243 名前:241 mailto:sage [04/12/25 18:46:13] そう言えばswitchとclassのインデントの付け方は同じになっている。
244 名前:デフォルトの名無しさん mailto:sage [04/12/25 23:17:43] >>243 それがpublic、protected、privateのことなら俺も同じ。
245 名前:デフォルトの名無しさん [05/01/30 14:52:51 ] b
246 名前:デフォルトの名無しさん mailto:sage [05/02/03 22:24:32 ] switch (...) { case 1 : { foo(); } break; case 2 : case 3 : case 4 : { foo(); } break; case 5 : foo(); // Fall Through default : { foo(); } break; } 俺のスタイル。 switchは滅多に使わんがなー
247 名前:デフォルトの名無しさん mailto:sage [05/02/04 20:26:43 ] ↑馬鹿発見
248 名前:デフォルトの名無しさん mailto:sage [05/02/04 20:31:31 ] >>246 そうかそうか、それは素晴らしい書き方だな。よーくわかったぞ。
249 名前:デフォルトの名無しさん [05/02/27 15:11:54 ] >>247-248 必死だなwwww
250 名前:デフォルトの名無しさん mailto:sage [05/03/02 12:56:35 ] switch (n) { case FOO: foo(); break; case BAR { int x = bar(n); baz(x); } break; }
251 名前:デフォルトの名無しさん [05/03/05 03:57:03 ] >>250 おお、なんと感動的な書き方なんだ。正直、俺は感動した。
252 名前:デフォルトの名無しさん mailto:sage [05/03/05 19:25:32 ] 俺スタイルは>241に酷似。 switch (n) { case FOO: foo(); break; case BAR: // baz(int&) の引数のために実体となる変数が必要 ← みたいに、なんかコメントしとく { int x = bar(n); baz(x); } break; }
253 名前:デフォルトの名無しさん mailto:sage [05/03/06 00:00:51 ] 漏れは>>250 に似てるけどこうかな switch(n) { case FOO: { foo(); break; } case BAR: { int x = bar(n); baz(x); break; } }
254 名前:デフォルトの名無しさん mailto:sage [05/03/06 03:32:58 ] 禿は禿本で case FOO: foo(); break; case BAR: { int x; bar(); break; } こう書いてたっけ? 個人的には{で改行しない方が若干見やすいかなぁ
255 名前:デフォルトの名無しさん mailto:sage [05/03/08 00:16:03 ] いまやC++は(boostの)シリアライズを持っているので メンバ変数にhoge_と尻尾に_を付けるのではなく 一時変数に_を付ける spiritのサンプルにあった。 メンバに堂々と何もつけないのはなかなか気持ちがよいな
256 名前:デフォルトの名無しさん mailto:sage [05/03/08 00:45:46 ] >>255 > 一時変数に_を付ける 激しく受け入れ難い。
257 名前:デフォルトの名無しさん mailto:sage [05/03/08 19:00:08 ] てかメンバもローカルも_無しでよくね?
258 名前:デフォルトの名無しさん mailto:sage [05/03/08 20:56:40 ] ↑禿同 this->が付いてたらメンバ。
259 名前:デフォルトの名無しさん mailto:sage [05/03/09 06:37:01 ] >>258 技術的なメリット、デメリットでは this-> が最強なんだよな。 ・クラステンプレートのコードでは付けないと恐ろしい罠に嵌りかねない。 ・bool Is〜() な関数を自分で呼ぶときも this->Is〜() が読みやすい。 ・無節操にメンバに触りまくって最適化を台無しにする糞コードが減る。 問題は、一般性が皆無なことだな。 this-> と等価な . (単項ドット演算子)を作って、 省略不可にすれば、・・・どうなっていただろう?
260 名前:デフォルトの名無しさん mailto:sage [05/03/09 13:37:06 ] this必須でもいいけど、初期化リストのとこではthisつけられないよね?確か。
261 名前:デフォルトの名無しさん mailto:sage [05/03/09 13:47:48 ] 初期化リストならメンバか継承元であることが自明だから医院で内科医?
262 名前:デフォルトの名無しさん mailto:sage [05/03/09 18:57:55 ] class AAA { int size; public: AAA (int size) : size(size) // この行 {} }; こんなコードが通るのが微妙に気持ち悪かったり。 かといってメンバ名と仮引数名にうまく別の名前をつけられる妙案がない……。 this->size(size) って書ければ多少気持ち悪さも減るかと思ったの。そんだけ。
263 名前:デフォルトの名無しさん mailto:sage [05/03/09 19:03:41 ] >259の案を採用して、 class AAA { int size; public: AAA(int size) : .size(size) {} }; はどう? これも気持ち悪い?
264 名前:デフォルトの名無しさん mailto:sage [05/03/09 19:04:38 ] > this-> と等価な . (単項ドット演算子)を作って、 > 省略不可にすれば、・・・どうなっていただろう? 視認性が悪いものを必須にするのはちょっとなぁ。 いっそPythonよろしく、メンバ(変数|関数)の参照はthis必須の方がまだまし。 それに、visitor.visit(this)があるから、thisキーワードを なくせるわけじゃなし、見づらい構文糖衣の意味しかないと思われ。
265 名前:デフォルトの名無しさん mailto:sage [05/03/09 19:47:29 ] this必須がコンパイラで強制できればそれでもいいんだけど、 そうじゃないならm_プレフィクスの方がいいな。
266 名前:デフォルトの名無しさん mailto:sage [05/03/10 00:49:11 ] 流れ斬り! クラス内のメンバ関数の実体を書く順番は a)宣言と同じ順に b)重要なもの、呼ばれる頻度などの順に書き、宣言と順番が違う c)宣言から b) の順で、実体はその順 d)んなもん気にしてない 他にオレ流あるなら追記ヨロ あと、protected とかの種類別に分けてる or 分けてない?
267 名前:デフォルトの名無しさん mailto:sage [05/03/10 01:32:35 ] >>266 漏れ的には、 1) public -> protected -> private の順で宣言も実装も行う 2) コンストラクタとデストラクタは全てのメンバ関数に先駆けて書く という感じ。
268 名前:デフォルトの名無しさん mailto:sage [05/03/10 02:59:05 ] 全部宣言のところに実装も書く
269 名前:デフォルトの名無しさん mailto:sage [05/03/10 11:46:21 ] メンバ関数の実装ではお互いに他のクラスの定義を必要とすることがよくあるので、 基本的に宣言は宣言だけ。 実装は別ファイル。 テンプレートを除いてインライン関数も使わない。 例外は3つあって、一つは単に値を返すgetter系。 もう一つはシグネチャの違う他のメンバ関数を呼ぶだけのようなもの。 3つめは初期化リストだけで済んでしまって中身が何もないコンストラクタ。 これらは宣言のところに実装も書いてしまう。 実装のファイルでは意味的なグループごとに関数を近接させる。 public等のアクセス修飾は関係なし。
270 名前:デフォルトの名無しさん mailto:sage [05/03/16 10:55:25 ] メンバ変数だからって、特に目印はつけないのですか?
271 名前:デフォルトの名無しさん mailto:sage [05/03/16 10:57:20 ] とりあえず >>257- は読んだのか?
272 名前:デフォルトの名無しさん mailto:sage [05/03/18 06:34:51 ] 漏れの場合、条件付きインラインとかの為にも、 ヘッダーには宣言だけ書いてる。インライン関数は全部.inlに。 見た目もすっきりするし、最適化とかデバッグの時に有利かと。
273 名前:デフォルトの名無しさん mailto:age [2005/04/03(日) 01:17:18 ] age
274 名前:デフォルトの名無しさん mailto:sage [2005/04/06(水) 11:06:38 ] void hoge() か void hoge() か
275 名前:デフォルトの名無しさん mailto:sage [2005/04/06(水) 12:47:11 ] 識別子がクソ長かったら適当にこんな感じでバラしていく return_type function_name (argument1_type argument1_name, argument2_type argument2_name) { }
276 名前:デフォルトの名無しさん mailto:sage [2005/04/06(水) 12:50:11 ] template <typename T> void hoge(T arg)
277 名前:デフォルトの名無しさん mailto:sage [2005/04/06(水) 22:21:12 ] >>276 の書き方もしくは、 template<typename T> ReturnType FunctionName( ArgType1 arg1, ArgType2 arg2) { }
278 名前:デフォルトの名無しさん mailto:sage [2005/06/12(日) 05:19:09 ] for(int i = 0; i < n; i++) { } for(; ; ) { } 無限ループでも、例外なく ; の後にスペースを空ける。
279 名前:名無しさん@そうだ選挙に行こう mailto:hoge [2005/09/11(日) 14:42:07 ] hoge
280 名前:デフォルトの名無しさん mailto:sage [2005/09/17(土) 11:31:43 ] marudasi(lambda() {baka;} ); と書ける処理系作ったおれはスゴイ
281 名前:デフォルトの名無しさん mailto:sage [2005/09/18(日) 20:12:33 ] まあシンタックスで困ることはほとんどないな こだわる人は勉強してる人が多いけど
282 名前:デフォルトの名無しさん mailto:sage [2005/11/08(火) 00:30:45 ] >>270 付けない 無くて困ると言う事は、クラスが巨大過ぎる気がする
283 名前:デフォルトの名無しさん mailto:sage [2005/11/08(火) 08:18:16 ] >>282 付けてる人同士のソースの相互理解容易度の高さを知らないんだね どんなに小さいクラスでも有用だよ。
284 名前:デフォルトの名無しさん mailto:sage [2005/11/08(火) 20:46:40 ] 俺はm_プレフィクス派だな。 1. 見てわかる 2. リファクタリング用の機能がなくても一気に置換できる 3. this->は長い上にどこかのメンバ関数の中でつけ忘れててもコンパイルでき 処理系で強制できない。
285 名前:デフォルトの名無しさん mailto:sage [2005/11/09(水) 23:53:23 ] >>283 まあ、美意識の問題が大きいので(慣れもかな) m_は、個人的に、異様に汚く見える(あくまで主観) ローカル変数は、宣言即初期化派&& それが追い辛くなるほどメソッドを大きくしない派 なので、メンバ変数と区別が付かない||相互理解が不便なんて事は無い
286 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 00:33:08 ] >>285 きこえてアムロ?メンバ変数とローカル変数を見分けるまでの作業量が全然違うのよ。 単純化するためにグローバル変数とかスタティック変数とかは抜きにして説明すると ■メンバ変数とローカル変数に命名方法の区別をしない場合 1) ある変数を見る。 2) その変数より前の部分を関数のはじめまでみる 3) 途中に宣言があればローカル変数、引数に指定されてれば引数、どちらでもなければローカル変数と決定できる。 ■プリフィックス又はサフィックスでメンバ変数のみ印付けをしている場合 1) ある変数を見る 2) その変数に印付けがされていればメンバ変数、そうでなければローカル変数か引数 上下方向への視点の動きがまったく発生しなくなるのがおわかりいただけて?
287 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 01:36:47 ] 俺も、m_ はマイクロソフト系ツール使うまで、全く不要と思っていたが、使い始めるとやめられなくなる。
288 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 02:25:02 ] >>286 否、だから・・・ >上下方向への視点の動きが そんな事が邪魔になる様なコードを書かないって話。 逆に、それで解りづらくなると、メソッドの構成とかを見直すから 無い方が良い気もしないでもない。。 見分けが解りやすいと、その辺が鈍感になる それから >1) ある変数を見る。 >2) その変数より前の部分を関数のはじめまでみる こんな追い方しなきゃいかんと言う事は メソッドが長すぎるんでないかい?? さらに、それから、別にm_を否定してる訳ではない、念の為
289 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 02:38:10 ] >>288 視点って目が見てる部分のことだよ? 速読術でもやってる人ならわからないけど 普通の人間は"面"全体を注目することはできない。 文章の中やコードの中であれば、一行しか注目はできないの。 ここまでOK? ある変数名に注目してしまった時、 コードが2行以上ならばもう他の行は同時には注目できないでしょう? そのある変数名に注目した段階で判別できる方法が 何らかのプリフィックスやサフィックスを使う方法で、 一度別の部分に注目する場所を移してから判別するより 遥かに効率がいいの。 あなたのコードが全てベーマガに掲載されそうな一行コードならいいんだけど。
290 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 02:49:00 ] >文章の中やコードの中であれば、一行しか注目はできないの。 ? 人間の視点って「"面"全体」は見ること出来ないけど 「ある程度のかたまり」で認識できると思うけど 逆に、「一行しか」って注目は難しい気がする 横だけの集合だけ注目度が高くなるのも ちょっと不思議な気がしないでもない
291 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 02:59:28 ] 標準の set を実装する場合など、自然な命名だと メンバ変数に size なんてのが置きたくなって メンバ関数の size() と被ってしまう。 m_ はそんな時にも助けになる。
292 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 03:04:20 ] size_
293 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 03:13:09 ] >>292 流れを読むようにしような。
294 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 07:56:03 ] >>290 結局"おれはm_とか付けたくない"っていう結論ありきで 相手の話を理解しようとして聞いてないじゃない あんたはソースの中に縦書きでも探してれば? それとも縦書きに釣られすぎて横方向に文字読みながら 縦方向にも縦書きを探せるなんてかわいそうな 特殊技能でも身に着けちゃってるのかね
295 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 08:49:37 ] まあしょせんハンガリアン命名記法だから、いまさら論争自体がなあ。 コードレビューとして考えて意味の把握のしやすさのほうが問題で、 個人的には単純に視点の移動を作業量と考えるのはメリットが無い。 絶対的な利便性があるわけでもなく、強制はナンセンス。 そうしたい人だけそうすれば。
296 名前:295 mailto:sage [2005/11/10(木) 08:51:58 ] >そうしたい人だけそうすれば。 訂正、そういう規約がある/必要な場合にその人が守ればいいだけ。
297 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 10:51:06 ] m_ プリフィックスをハンガリアンとか言ってる時点で見識のレベルの低さが露呈してるんだけどね。
298 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 11:18:22 ] 所詮、ローカルルールでしょ
299 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 12:00:32 ] わたしも、所詮ローカルルールと言う意味などでハンガリアンみたいなもの と言ってるのだが、 >>297 ほう、見識が高いと、m_ プリフィックスはハンガリアンではないと? それはそれで言い分があるかもしれないから、まともに見識のあることを 喋ってごらん。喋れるなら。通じない根拠や相手の非難だけにすり替えないで。
300 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 12:05:00 ] >>299 別におれは297じゃないんだけどさ。 もとの書き込み(>295)では「みたいなもの」などと言わずに、そのものだと言い切っている。 「ハンガリアンはプリフィックス」は真だと思うが、 「プリフィックスはハンガリアン」とは言えないだろう。 「ごめんなさい」が言えない人ですか?
301 名前:300 mailto:sage [2005/11/10(木) 12:07:43 ] > 「ハンガリアンはプリフィックス」は真だと思うが、 > 「プリフィックスはハンガリアン」とは言えないだろう。 ごめん、「m_ プリフィックス」ってなってるのを見落としてた。 「m_ プリフィックス」はハンガリアンじゃなくて ただのメンバ変数を表すプリフィックスだから 言いたいことは同じだけどね。
302 名前:297 mailto:sage [2005/11/10(木) 12:40:51 ] >>299 m_プリフィックスがハンガリアンだという資料があれば俺に教えて欲しいくらいだ。 まず君はここらへんから読みたまえ。 www.radiumsoftware.com/hungarian_notation.html メンバ変数か否かというのはC/C++言語における"型"かね? そうではないだろう?
303 名前:295 mailto:sage [2005/11/10(木) 13:39:17 ] >>300-302 なんだ、見識どうこうといって、やはりその話なんだ。 もちろん m_ がオリジナルな意味での Hungarian Notation でないのは ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs600/html/hunganotat.asp もともと否定しない。しかし(少なからぬ人と同じように)スコープを示す 一種の拡張ハンガリアンとしてのローカル規約であると捉えるので、 ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/stg/stg/coding_style_conventions.asp m_ どうこうの強制や論争自体がナンセンスであると。 (たいてい賛成派もきちんと理由を挙げられない) で、別に m_がハンガリアンであろうとなかろうと論旨には全く関係無いが、 そういうところを見識といって揶揄するぐらいしかできないと?
304 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 14:20:48 ] >>303 なんかスレが伸びてると思えば。もう頭悪いね君としか言いようがないな。 1. m_ はcoding style convensionであって、属性をコード化するハンガリアン とは関係ない(ハンガリアンの延長線上と看做す向きもあるが見解の分かれる ところであるし、個人的には牽強附会と思う)。 論争が意味ないとかいうのは一連の議論を否定するただの煽りでしかなく、 m_プレフィクスの無用性について意味のある主張をしたいのなら命名法で 区別することによるメリットがないことを示せ。もしくは>>295 の > コードレビューとして考えて意味の把握のしやすさのほうが問題で、 というのがm_プレフィクスにより激しく損われるという論拠でもよい。 (それが他人にとってm_プレフィクスの有用性に優越するかどうかは別の問題だ が、個人・場合による問題なので異なる見解が両立し得る) 一般のハンガリアン記法の適用を否定する主張としては一理あるが、我々は m_プレフィクスについての議論をしているのであり、ハンガリアンの延長線上と 君が看做したからといって盲目的に適用するのは無茶と言うもの。 2. ただの煽りでしかなければ見識がないと言われるのは必然である。しかも > で、別に m_がハンガリアンであろうとなかろうと論旨には全く関係無いが、 という主張は > まあしょせんハンガリアン命名記法だから、 で始まる>>295 自体の意味を否定する。即ち>>295 が無意味な煽りであり、295には 見識がないということを自分で立証している。 3. ちゃんと理由は挙げられているのに個別に反証することなく > (たいてい賛成派もきちんと理由を挙げられない) と書いているのは他人のレスをろくに読みもしていないことを立証している。
305 名前:295 mailto:sage [2005/11/10(木) 15:23:50 ] >1. >ハンガリアンの延長線上と看做す向きもあるが見解の分かれる >ところであるし、 >(それが他人にとってm_プレフィクスの有用性に優越するかどうかは別の問題だ >が、個人・場合による問題なので異なる見解が両立し得る) つまりどちらかの立場をとること自体に問題は無い。 >区別することによるメリットがないことを示せ。 すでに>>288 等(295とは別人)も繰り返してるだろう。 結局"おれはm_と付けてる"っていう結論ありきで 相手の話を理解しようとして聞いてないじゃない #288等補足: #コードレビューとして考えて意味の把握のしやすさのほうが問題で、 #個人的には単純に視点の移動を作業量と考えるのはメリットが無い。 #(個人的には可読性が落ちるケースが少なくない。m_をつけて #よしとして全体としての意味をとりにくい名前のままの事があるから、 #とも思っている) >2. 煽られたと思うところ、喰いつきやすそうな所だけ問題にしたい、と。 <絶対的な利便性があるわけでもなく、強制はナンセンス。 <そういう規約がある/必要な場合にその人が守ればいいだけ。 >3. ちゃんと理由は挙げられているのに個別に反証することなく ええと、そのちゃんとというのは >>286 ,289 あたりですか? (直後にも反論(?)ついてるようですが)
306 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 17:05:51 ] 君、謝っちまったほうが楽になるよ。 自分の価値が下がるわけじゃない。むしろ上がるさ。
307 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 17:51:58 ] >>306 "おれはm_と付けてる"から揶揄に終始しますと。ご苦労様です。 別にまともな論が無かろうと、そういう規約がある/必要な場合に そうするのは止めやしない。まこといまさら論争自体がナンセンス。
308 名前:306 mailto:sage [2005/11/10(木) 18:34:58 ] 俺、どっちが悪いとか言って無いのになぁwww 食いついた方が、実は自分が不利だと悟ってる方だと思って 書き込んでみたがこううまくいくとは思わなかった。
309 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 20:46:47 ] ほほーぅ、それでそれで?
310 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 22:16:15 ] 結論: 295はアフォ。 そろそろ次の話題行きましょ。
311 名前:デフォルトの名無しさん mailto:sage [2005/11/10(木) 22:47:43 ] 305はあれで反論したつもりになってるんだろうか。 自分で相手の主張を肯定していることに気がつかない頭の弱さカワイソス。
312 名前:デフォルトの名無しさん mailto:sage [2005/11/19(土) 03:13:19 ] >>274 後者。grep で関数名引いた時、返す型が表示されないってのは かなり痛い。
313 名前:デフォルトの名無しさん mailto:sage [2005/11/22(火) 00:59:22 ] >>312 つ grep -B 1
314 名前:デフォルトの名無しさん [2005/11/23(水) 17:13:43 ] >>308 レス先書かなきゃ、直前のレス宛だと考えるのが普通ですよ。 こういうのがわからない人のコードって、さぞ自分勝手なんだろうな :-)
315 名前:デフォルトの名無しさん mailto:sage [2005/11/26(土) 02:31:31 ] m_とかg_とか付けるとかってさぁ、自分だけでプログラムしてるならいいけど 多人数で作ってると付けて欲しいんだよね。 人によってスタイル違うしクラスからグローバル変数使いまくりな タココード書く奴が足引っ張って大変。 メンバ関数内で何も付けずにローカル、メンバ、グローバル変数が 入り乱れた他人のコードを追うのはきついぞ。 そんなので新人がマルチスレッドのコード書くもんだからたまらん。 何も付けない派の奴らにお見舞いしたいコードだ。
316 名前:デフォルトの名無しさん mailto:sage [2005/11/26(土) 04:43:41 ] >>315 それはプレフィクスごときで解決する問題じゃないと思うが……
317 名前:デフォルトの名無しさん mailto:sage [2005/11/26(土) 13:15:48 ] 多人数で作るならある程度のコンベンションを決めるのは当たり前だと思う m_ でも g_ でも付けないでもいいから、とにかく揃えておくというのが重要かと タココードを書くやつがいるというのは別問題だな
318 名前:デフォルトの名無しさん mailto:sage [2005/11/26(土) 13:36:21 ] グローバル変数はそれなりに存在価値がある。 staticメンバ変数として隠蔽されていた方が、かえって追跡しにくい場合もある。 タココードの場合は、独自の名前空間にいれるよう強要すれば問題解決でしょ・・・多分。
319 名前:デフォルトの名無しさん mailto:sage [2005/11/26(土) 13:43:54 ] ま、手軽に、using namespace xxx を グローバルスコープで宣言された日には手も足もでないんだけどね。
320 名前:デフォルトの名無しさん mailto:sage [2005/11/26(土) 14:07:00 ] >>318 > グローバル変数はそれなりに存在価値がある。 > staticメンバ変数として隠蔽されていた方が、 > かえって追跡しにくい場合もある。 具体的にどんな場合?
321 名前:デフォルトの名無しさん mailto:sage [2005/11/26(土) 14:56:06 ] >>318 タコかどうかなんて、ほぼ書き上げられたソースを見るまで 判らん場合もあるわけで
322 名前:デフォルトの名無しさん mailto:sage [2005/11/26(土) 15:17:25 ] Socketまわりなんかタコどころか糞コードだからな
323 名前:デフォルトの名無しさん mailto:sage [2005/11/26(土) 20:49:16 ] 逆に言えば(当然のことながら) ネーミングルールを決めただけでタココード/糞コードがそうでなくなることなど無い
324 名前:デフォルトの名無しさん mailto:sage [2005/11/26(土) 22:37:23 ] >>323 ・・・確かに。 タコのタコたる所以は、命名ルール無視などという生易しいものではない罠。
325 名前:デフォルトの名無しさん mailto:sage [2005/11/26(土) 23:53:51 ] タココードでもネーミングルール守っていてくれれば、まだマシなのでは?
326 名前:デフォルトの名無しさん mailto:sage [2005/11/27(日) 00:31:43 ] グローバルやstatic変数にコールバック関数が入り乱れる自分にしか 理解できないコードを書く奴を抑止できる状況にもっていけない 場合は多々ある。せめてg_だけでもいいから付けてくれ。 予期せぬ不具合はグローバルがらみが多すぎる。
327 名前:デフォルトの名無しさん mailto:sage [2005/11/27(日) 04:42:19 ] 蛸コード書く香具師のプレフィックスほど当てにならないものはない。 結局、自分で検索してマーキングした方が間違いなかったりする。
328 名前:デフォルトの名無しさん mailto:sage [2005/11/27(日) 16:37:26 ] >>325 タココード見たことないのか? お前がタコじゃないか?
329 名前:デフォルトの名無しさん mailto:sage [2005/11/27(日) 17:08:41 ] >>328 おまえのように1か0かしか言わない奴っているよな そして何も状況は変わらない そりゃタコを育てる時間があったり、タコを入れ替えて優秀なマを入れる 余裕のある所はそうするのが最善だろうが
330 名前:デフォルトの名無しさん mailto:sage [2005/11/27(日) 19:44:03 ] __ , −、/:::::::::::::::::::::l ヽ::::、:::::::::::::',::::::::::ヽ::::::::::::::::ヽ:::::::::::ヽ /:::::::::::::t.- 、ノ::::::::::l::::::::|::| ヽ::::i、:::::::::::、::::::::__ヽ:::::::::::::::`、:::::::::::', . / ::::::〃 }:::::::|:::l!::::::l|::| 丶:l.\::::::::i<:::::: ̄`ヽ::::l:::::l::::::::::::i i:::::::::::::;イ/`ーr':::::::::!::|!::::::|lィ´ ヽ \:::゙、 丶::::ヽ\:::::l:::::l::::::::::::l |::::::::::/ li l::::::::::l:::l|:/ !| \ \:ヽ \::', ゙、:::l:::::l::::::::::::! . !:::::;:/ l! |::::::::::|::|イ:::| l:! ヽ__ \ ヽ::!、::l::::l::::::| l::::l:! | |::::::::::l::| l:::! l __ 〃, ̄::`ヽ、 ',::ヘ:!-、:::::! . ヽ|! |::::::::l:| l:| ! ,, ==、 {::::::::::ハ ヽ Y ,ヘ !:::| !::!:::::l:l| l! 〃/´:::::ヽ い-‐ク 〈ヽ. ハ{ l:l|:::::l:lヘ i! {:;、_;;:::、} `¨´ !' ,.イ l| l::::ト.{. `、 l! `ー-- ′ ,'r'´ l{ ! ヽ:| ヽ. ヘ ' /i{ `iー、 〃 おっちゃんら }ハ _ ィl;{_ 悲観的な事ばっかやなぁ ` 、 ‘ ′ ,. '´ ヽ: :`ー- 、 そんな人生おもろいかぁ? `j丁`i¬ー、‐ '´ \: :、: : :ヽ ,{ { : :∨ } _`_y: : : :.}_ /:! ヾ、 : :', _,.-‐'´ ̄: : : : :`:ー--'j /: : :| ヽ: } /: : : :_;.-‐'´ ̄`ー- :___;ハ / : : :! `f‐'´:_;.-‐'´ i
331 名前:デフォルトの名無しさん mailto:sage [2005/12/04(日) 11:56:55 ] そんな瑣末な方言の議論はさておき、メンバ変数のためだけに set_xxxx,get_xxxx関数を作るのがコーディングに真の勝者なのだ。
332 名前:デフォルトの名無しさん mailto:sage [2005/12/05(月) 02:24:34 ] 全部インラインにしておけよ。遅いから。
333 名前:ハーピィ mailto:sage [2005/12/05(月) 02:45:57 ] E・∇・ヨノシ <333ゲット♫
334 名前:デフォルトの名無しさん mailto:sage [2006/01/01(日) 15:46:50 ] >>330 なんでオマエ関西風味よ?w
335 名前:デフォルトの名無しさん mailto:sage [2006/01/05(木) 09:59:06 ] >>331 プロパティ
336 名前:デフォルトの名無しさん mailto:sage [2006/02/03(金) 16:12:47 ] 節分です
337 名前:デフォルトの名無しさん mailto:sage [2006/03/15(水) 06:14:52 ] STLの名前って最初がみんな小文字だから矢田 俺のクラスとか変数とか関数とか皆最初大文字なのに 統一できない
338 名前:デフォルトの名無しさん mailto:sage [2006/03/15(水) 06:25:39 ] >>337 いっそ、std::find()→StdFind()みたいな置き換えインクルードファイルでも作ればいいじゃん。 #一度作ればずっと使えるわけだし。
339 名前:デフォルトの名無しさん mailto:sage [2006/03/15(水) 21:16:58 ] >>338 自分の名前空間に入れろよ。
340 名前:338 mailto:sage [2006/03/16(木) 01:16:41 ] >>339 漏れに言うなよ。
341 名前:デフォルトの名無しさん mailto:sage [2006/03/18(土) 17:51:12 ] >>338 言い方が冷たいよ…もっとお母さんみたいに言ってくれ。
342 名前:338 mailto:sage [2006/03/19(日) 17:05:02 ] すまん、言葉には聞いたことがあるのだが、それがどんなものなのか知らないんだ。
343 名前:デフォルトの名無しさん mailto:sage [2006/03/20(月) 14:14:29 ] お母さんを知らずに育ったのか…(´・ω・) カワイソス
344 名前:デフォルトの名無しさん [2006/05/01(月) 07:35:44 ] インライン関数は淫乱なのですか?
345 名前:デフォルトの名無しさん mailto:sage [2006/05/01(月) 07:47:46 ] そうでもないよ。
346 名前:デフォルトの名無しさん [2006/05/01(月) 09:18:33 ] クラスの変数をprotectedにするかprivateにするかで先輩と議論しなりました。 僕は派生されるクラスからもアクセスできるようにprotectedに入れたいのですが、 先輩はprivateにいれてアクセス用の関数を作るべきだといいます。 その方が変数名が変わったとき、派生クラスを直さなくてよいから、 というのが理由だそうですが、どうも納得行きません。 どうにか説得できないでしょうか?
347 名前:デフォルトの名無しさん mailto:sage [2006/05/01(月) 09:21:05 ] >>346 protected は中途半端。 方針としては中途半端。 「見えちゃ嫌だけどちょっとは見えたほうが」 そんなの微妙すぎ。
348 名前:デフォルトの名無しさん mailto:sage [2006/05/01(月) 09:28:09 ] >>346 protected な変数が必要になるのはカプセル化が弱いせいではないか? よく考えることだ。 たとえば、変数を protected にするということは、何かしら 特別な意味を持った操作を想定しているのではないか? そうだとしたら、変数は private にしてその操作を関数にするべきだ。 逆に見えてもいいってことは、どういじったところで問題ないんじゃないか? そうだとしたら、その変数は public でいい。 どちらにも当てはまらないときだけ、 protected を使う根拠になる。
349 名前:デフォルトの名無しさん mailto:sage [2006/05/01(月) 09:55:29 ] >>346 ↓こんなのがエラーになるから嫌だ。 class B { protected: int n; }; class D : public B { int f(B& b) { return b.n; } };
350 名前:デフォルトの名無しさん [2006/05/01(月) 09:58:46 ] >>1 Sleep(∞)
351 名前:デフォルトの名無しさん [2006/05/01(月) 10:00:52 ] (・,J・)
352 名前:デフォルトの名無しさん [2006/05/01(月) 12:47:56 ] 派生クラスが親の変数にアクセスできなきゃ不便でしょうがなくない? 全部Set/Get関数使うの〜?
353 名前:デフォルトの名無しさん mailto:sage [2006/05/01(月) 13:16:38 ] >>352 だからそれは設計が悪いんだって。
354 名前:デフォルトの名無しさん mailto:sage [2006/05/01(月) 14:50:36 ] いや設計とかじゃなくて…
355 名前:デフォルトの名無しさん mailto:sage [2006/05/01(月) 15:19:07 ] // もしwings_がprotectedだとKiwiの羽が存在してしまうってことか? class cBird { cWings wings_; public: cWings const & wings() const {return wings_;} void flap() const { ...; } void fly() const { ...; flap(); ...; } }; class cKiwi : public cBird { public: cWings const & wings(); // kiwi have no wings. void flap() const; // kiwi can't flap. }; class cPenpen : public cBird { public: void fly() const; // penpen can't fly. }; // 書いてて知恵熱が出てきた
356 名前:デフォルトの名無しさん mailto:sage [2006/05/01(月) 18:25:35 ] >>352 ユーザーがクラスのメンバにアクセスできなきゃ不便でしょうがなくない? 全部Set/Get関数使うの〜? って聞かれてる気分だ。
357 名前:デフォルトの名無しさん [2006/05/01(月) 18:59:59 ] Personクラスに「名前」があって、もしprivateに置かれてたら Personから派生したStudentは名前無しって事か。 学生は辛いな。
358 名前:デフォルトの名無しさん mailto:sage [2006/05/01(月) 19:06:32 ] >>357 Person の「名前」が private なら、 Person に「名前」があることは Person 以外だれも知らないから問題ない。 Person に「名前」ある(と外部が知っている)ということは、 Person の「名前」は public であるから Student が Person を public 継承していれば何も問題ない。
359 名前:デフォルトの名無しさん mailto:sage [2006/05/01(月) 19:18:41 ] >>355 private だとメンバ変数が消えるとでも思ってんの?
360 名前:355 mailto:sage [2006/05/01(月) 19:25:54 ] >>359 アクセスする手段がなければ存在しないのと大差ないでしょ。 見えなくするってのはそういうことかと思ったのだけど。
361 名前:デフォルトの名無しさん mailto:sage [2006/05/01(月) 19:37:07 ] カプセル化ちゃんと学んだらどうだ。
362 名前:デフォルトの名無しさん mailto:sage [2006/05/01(月) 19:38:22 ] >>360 アクセスする手段はそのメンバを持ってるクラスが提供するんだよ。
363 名前:355 mailto:sage [2006/05/01(月) 19:49:51 ] >>362 漏れが書いたコード見て言ってる? 規定クラスにはそういうI/Fを用意したけど、派生クラスで敢えてオーバーロードで潰しているんだけど。 もしかして>359=>361=>362? 喪前様のレスからは意味のある情報が一つも引き出せないのだけれど。
364 名前:デフォルトの名無しさん mailto:sage [2006/05/01(月) 19:54:57 ] >>363 潰してる?アップキャスト一発で破綻するだろ?
365 名前:デフォルトの名無しさん [2006/05/01(月) 19:57:17 ] >>358 >Person の「名前」が private なら、 Person に「名前」があることは >Person 以外だれも知らないから問題ない。 StudentはPersonなんだから名前がある事を知っていた方がよくない? privateだとStudentからも見えないわけだが。 Person has-a Name. Student is-a Person. よって、Student has-a Name.
366 名前:デフォルトの名無しさん mailto:sage [2006/05/01(月) 20:09:16 ] >>365 > StudentはPersonなんだから名前がある事を知っていた方がよくない? > privateだとStudentからも見えないわけだが。 そこで public にしないのは何故だ?
367 名前:デフォルトの名無しさん mailto:sage [2006/05/01(月) 20:10:15 ] Person の「名前」って言っても、実際はデータメンバと参照用メソッドがあって それぞれにアクセス制限を選ぶことが考えられる。 private なデータメンバと、 public な参照用メソッドがあるのが一般的だな。 protected の出番はなかなか思い当たらない。
368 名前:デフォルトの名無しさん mailto:sage [2006/05/01(月) 20:48:09 ] ちなみにここで議論されていることって 何かにまとめられているの? 関係ないけどCをオブジェクト指向っぽくできないものかと 思案中・・・ 一応組み込み向けの本でそれらしきのがあったのでそれを参考にしてますが・・・
369 名前:デフォルトの名無しさん mailto:sage [2006/05/01(月) 20:56:01 ] >>368 「カプセル化」という基本事項にまとめられると思ってる。 クラスを作る意義のひとつだな。 C でオブジェクト指向なんてメンドクサイから C++ 使えよ。
370 名前:デフォルトの名無しさん mailto:sage [2006/05/01(月) 21:16:24 ] pythonつかえ。 悩みから開放されるぞ。 「みんな大人だ」
371 名前:デフォルトの名無しさん mailto:sage [2006/05/02(火) 02:38:05 ] 「Cをオブジェクト指向っぽく」なら、せっかくだから Objective C 使え C++ よりずっとセクシーだぞ
372 名前:デフォルトの名無しさん [2006/05/02(火) 08:18:54 ] >>367 >protected の出番はなかなか思い当たらない。 派生クラスだけにアクセスさせたい変数はprotectedでいいのでは? そうゆう変数って普通に沢山あると思うけど。
373 名前:デフォルトの名無しさん mailto:sage [2006/05/02(火) 08:20:43 ] >>372 >>348
374 名前:デフォルトの名無しさん mailto:sage [2006/05/02(火) 08:23:13 ] > そうだとしたら、変数は private にしてその操作を関数にするべきだ。 その関数を protected にするなら同じやん
375 名前:デフォルトの名無しさん mailto:sage [2006/05/02(火) 08:25:42 ] >>374 同じだと思うなら private にしとけよ。 protected なデータメンバだと派生クラスから変更できてしまうからカプセル化が崩れる。
376 名前:デフォルトの名無しさん mailto:sage [2006/05/02(火) 08:43:35 ] D&Eにもprotectedな変数を使うと駄目だというような事が書いてある。
377 名前:デフォルトの名無しさん mailto:sage [2006/05/02(火) 10:41:38 ] これだな。 www.google.co.jp/search?q=%22you+don%27t+have+to+use+protected+data+in+C%2B%2B%22
378 名前:デフォルトの名無しさん mailto:sage [2006/05/02(火) 11:15:14 ] 某別スレで以前、なんでもかんでもprivateにする奴はC++のど素人…みたいな事を 言ってる奴いたな 会社でそういうソースを見て頭がいたくなったとかなんとか たいそうな達人ですなw
379 名前:デフォルトの名無しさん [2006/05/02(火) 12:42:20 ] >>375 セオリーと現実の違いだと思う。 すべてをカプセル化するのは現実的にはオーバーヘッドが大きすぎる。 熟練したC++プログラマならprivateとprotectedをきちんと使い分できる。
380 名前:デフォルトの名無しさん mailto:sage [2006/05/02(火) 12:47:08 ] >>379 きちんと使い分けた場合 protected の出番はごく稀になると思うんだが、どうかね? 特にデータメンバにおいては皆無になるだろう。
381 名前:デフォルトの名無しさん mailto:sage [2006/05/02(火) 12:49:28 ] >>379 inine がある C++ ではオーバーヘッド無しでカプセル化を実現可能じゃないか?
382 名前:デフォルトの名無しさん mailto:sage [2006/05/02(火) 12:55:46 ] つまり、ここは一部の「熟練していると思い込んでいるC++プログラマ」が一人(或いは数人で) 強硬にカプセル化を否定しているのを、普通にC++を使えているプログラマ連中が ニヨニヨしながら構っているのを、慣れてないC++プログラマが困惑しながら見守っている スレだということで宜しいか。
383 名前:デフォルトの名無しさん mailto:sage [2006/05/02(火) 12:56:17 ] いや全然違うけど。
384 名前:デフォルトの名無しさん mailto:sage [2006/05/02(火) 14:45:25 ] >>381 ×inine ○inline
385 名前:デフォルトの名無しさん mailto:sage [2006/05/02(火) 19:44:07 ] protectedを使う事が熟練C++マだと勘違いする子が右往左往するスレ
386 名前:デフォルトの名無しさん mailto:sage [2006/05/02(火) 20:26:09 ] 俺もちょっと興味あるな。 誰か識者の人解説してくれないかな。 protectedとpublicの概念に、明確な違いがあるのなら。
387 名前:デフォルトの名無しさん [2006/05/03(水) 08:01:23 ] public=公共の場で全裸 protected=自分ちで全裸 private=風呂で全裸 家族になら見られてもいいって人はprotectedもアリだと思うよ。
388 名前:デフォルトの名無しさん mailto:sage [2006/05/03(水) 08:08:33 ] 継承を使わない奴にはprotectedは必要ない。
389 名前:デフォルトの名無しさん mailto:sage [2006/05/03(水) 08:09:10 ] protectedだとうっかり窓から外の人に全裸が見えてアウチ。
390 名前:デフォルトの名無しさん [2006/05/03(水) 08:21:25 ] >>389 具体例をきぼん
391 名前:デフォルトの名無しさん mailto:sage [2006/05/03(水) 08:55:59 ] >>390 卑猥なやつだな。しかもageてるし。恥ずかしいだろ。
392 名前:デフォルトの名無しさん [2006/05/03(水) 09:43:29 ] ↑ 恥ずかしいなら手術すればいいのに。
393 名前:デフォルトの名無しさん mailto:sage [2006/05/03(水) 09:49:47 ] NVIパターンの話だな
394 名前:デフォルトの名無しさん mailto:sage [2006/05/03(水) 12:40:52 ] protectedの使い道分かってない人って結構多いんだね… ビクーリ
395 名前:デフォルトの名無しさん mailto:sage [2006/05/03(水) 13:20:15 ] >>394 じゃあお前が誰でも納得できるように説明してみろやカス
396 名前:デフォルトの名無しさん mailto:sage [2006/05/03(水) 13:41:15 ] ヒント:継承
397 名前:デフォルトの名無しさん mailto:sage [2006/05/03(水) 13:44:39 ] つーかツマンネ。 全部privateで書いて、とうしても必要になったらprotectedに変えればいいじゃん。 もっと面白いコーディングスタイルの話題は無いのか?
398 名前:デフォルトの名無しさん mailto:sage [2006/05/03(水) 14:03:52 ] >>388 プ 設計が悪い事に気づいてない奴が一人
399 名前:デフォルトの名無しさん mailto:sage [2006/05/03(水) 14:08:56 ] もうgetterとsetter書くの面倒だし全部publicで良くね? eclipseのJDTみたいに、チェックボックスにチェック入れるだけで getterとsetter書ける開発環境があればprivateにしてやるよ。
400 名前:デフォルトの名無しさん mailto:sage [2006/05/03(水) 14:46:10 ] >>399 そんな奴がいるから VB とか C# にはプロパティなるものがあって、 Visual Studio にはプロパティ生成機能が付いてる。
401 名前:デフォルトの名無しさん mailto:sage [2006/05/03(水) 14:58:28 ] >>397 自分が理解できない事には「ツマンネ」で終わらす気ですか?
402 名前:デフォルトの名無しさん mailto:sage [2006/05/03(水) 15:54:37 ] EA買ってソース自動生成すれば?
403 名前:デフォルトの名無しさん mailto:sage [2006/05/03(水) 15:59:26 ] そこまでいくとスレ違いじゃね もう「コーディング」じゃなくなるから
404 名前:デフォルトの名無しさん mailto:sage [2006/05/03(水) 20:13:12 ] そんなに手間を惜しみたいのなら#defineでゲッターセッター作れカス
405 名前:デフォルトの名無しさん [2006/05/03(水) 21:55:12 ] コーディングスタイルを統一するためC/C++用のsource code formatter/beautifierを 使いたいんですが、Windows用でおすすめがあれば教えて下さい。
406 名前:デフォルトの名無しさん mailto:sage [2006/05/03(水) 23:27:26 ] オブジェクトコンポジションで単純な委譲を使うとき、 移譲先が同じ翻訳単位内なら直にリンクしてくれたりするんですかね?
407 名前:デフォルトの名無しさん mailto:sage [2006/05/04(木) 07:35:21 ] 継承元は継承先にとって自分自身なんだから好きに出来て当然。 でも他人にはおれが分からないんだから、おれにアクセスするならコミニケーション取ってねって事でしょ。 だからおれは継承元クラスでは protected は結構使ってるな。 カプセル化を理由になんでもかんでも Set,Get なんでうざいだけじゃね?
408 名前:デフォルトの名無しさん mailto:sage [2006/05/04(木) 07:36:25 ] コミュニケーションだな(/ω\)
409 名前:デフォルトの名無しさん mailto:sage [2006/05/04(木) 08:23:38 ] Gettter/Setterは単に値を読み書きして実装詳細を隠すだけではなく、 そこで値の検査をするなどと言ったこともできる、って当たり前のことだよな?
410 名前:デフォルトの名無しさん mailto:sage [2006/05/04(木) 08:40:09 ] >>409 当たり前のことだな。カプセル化を否定してる訳じゃないよ。 でも値チェックするまでもないようなメンバとかも結構あるでしょ。 必要だと思う物はカプセル化してる。 使い勝手は人それぞれだけど、おれは直接アクセスできる方が便利だと思える箇所はそれなりにあるな。 こんなこと言うと、設計が甘いって言う人が出てくるんだけどな(´∀`)
411 名前:デフォルトの名無しさん mailto:sage [2006/05/04(木) 09:44:53 ] おれ的ルールはどうでもいい
412 名前:デフォルトの名無しさん mailto:sage [2006/05/04(木) 10:02:59 ] おれを信じよ
413 名前:デフォルトの名無しさん mailto:sage [2006/05/04(木) 12:58:12 ] おk
414 名前:デフォルトの名無しさん mailto:zage [2006/05/06(土) 15:44:31 ] >>407 今までで一番まともな見解。 やっぱり仕事としてプログラマしてる人は分かってるね。
415 名前:デフォルトの名無しさん mailto:sage [2006/05/06(土) 15:46:58 ] >>407 さすがプロの人の意見は参考になります(><)
416 名前:デフォルトの名無しさん mailto:sage [2006/05/06(土) 15:49:23 ] >407の人気に嫉妬
417 名前:デフォルトの名無しさん mailto:sage [2006/05/06(土) 16:17:20 ] なにこの自作自演
418 名前:デフォルトの名無しさん mailto:sage [2006/05/06(土) 23:06:40 ] 抽象クラスのメンバ変数とか場合によってprotectにしてる
419 名前:デフォルトの名無しさん mailto:sage [2006/05/06(土) 23:28:13 ] >>418 抽象クラスにメンバ変数はねーべ?
420 名前:デフォルトの名無しさん mailto:sage [2006/05/06(土) 23:46:18 ] え?
421 名前:デフォルトの名無しさん mailto:sage [2006/05/06(土) 23:50:35 ] な、なんだってー!
422 名前:419 mailto:sage [2006/05/07(日) 00:05:46 ] あーごめん。勘違いしてた。
423 名前:デフォルトの名無しさん mailto:sage [2006/05/07(日) 16:02:23 ] なにこのジサカーの巣窟www
424 名前:デフォルトの名無しさん mailto:sage [2006/05/07(日) 21:46:24 ] >>418 すればいいんじゃね?
425 名前:デフォルトの名無しさん mailto:sage [2006/05/07(日) 21:48:34 ] 抽象クラスだからって、 protected データメンバの出番が無いことに変わりはないね。
426 名前:デフォルトの名無しさん mailto:sage [2006/05/07(日) 22:54:46 ] >>425 それはお前だけ。
427 名前:デフォルトの名無しさん mailto:sage [2006/05/07(日) 23:13:03 ] >>426 じゃぁ抽象クラスと protected データメンバの関連って何なのさ?
428 名前:デフォルトの名無しさん mailto:sage [2006/05/08(月) 07:17:41 ] まずは自分で調べようよ。 いつまでも教えて君のままじゃ進歩しないよ。
429 名前:デフォルトの名無しさん mailto:sage [2006/05/08(月) 11:01:15 ] 調べると >>376-377 みたいなのが出てくるわけだが。
430 名前:デフォルトの名無しさん mailto:sage [2006/05/08(月) 12:06:18 ] こんなのもある。 www.gotw.ca/gotw/070.htm > protected data is evil (this time with no exceptions). Why is it evil? Because...
431 名前:デフォルトの名無しさん mailto:sage [2006/05/08(月) 20:10:15 ] 確かに初心者には使わせない方がいいね。 protectedやfriendは上級者向き。
432 名前:デフォルトの名無しさん mailto:sage [2006/05/08(月) 23:24:22 ] 実装継承も上級者向き。 無茶なキャストも上級者向き。 goto も上級者向き。 上級者向きって言葉は便利だね。
433 名前:デフォルトの名無しさん mailto:sage [2006/05/08(月) 23:44:23 ] 上級者向きってことは、もっと経験をつめってことだからな。 婉曲表現大好き日本人。
434 名前:デフォルトの名無しさん mailto:sage [2006/05/09(火) 00:39:01 ] >>431 リンク先読んだか?上級者とか関係ないよ。
435 名前:デフォルトの名無しさん mailto:sage [2006/05/09(火) 00:49:36 ] private public は低級者向き。
436 名前:デフォルトの名無しさん mailto:sage [2006/05/09(火) 01:42:20 ] 議論がループしてる。 もうこのスレも終わりだなw 他の話題ないのかよwww
437 名前:デフォルトの名無しさん mailto:sage [2006/05/09(火) 01:46:27 ] 過則勿憚改 自分の過ちを認める勇気も、技術者には必要だ。
438 名前:デフォルトの名無しさん mailto:sage [2006/05/09(火) 02:28:36 ] 過則勿憚改 自分の過ちを認める勇気も、技術者には必要だ。
439 名前:デフォルトの名無しさん mailto:sage [2006/05/09(火) 15:52:40 ] 過ぎたるは則ちフンドシ改めることなかれ
440 名前:デフォルトの名無しさん mailto:sage [2006/05/09(火) 18:16:18 ] データも仮想関数も全く同じ理由でpublicにすべきではない 二つは同じ歴史をたどっている データに関しては周知の通りだがそれが分かるには時間がかかった Javaでさえ失敗している。仮想関数についても同じことになるだろう。 要するに一つの関数/クラスに一つの機能。 これを守るのはすごく難しい。たとえばconst_iterator。 これは明らかに一つのクラスが二つの機能を持っておりC++のコードを倍に増やした 名前が形容詞で修飾されていたらその関数/クラスの設計はたいてい間違っている
441 名前:デフォルトの名無しさん mailto:sage [2006/05/09(火) 18:19:46 ] >>440 お前は何を言っているんだ?(ミルコ風
442 名前:デフォルトの名無しさん [2006/05/09(火) 19:21:18 ] >>440 神
443 名前:デフォルトの名無しさん mailto:sage [2006/05/10(水) 00:26:10 ] >>440 const_iterator が間違いだったとして、どうすれば正解だったの?
444 名前:デフォルトの名無しさん mailto:hage [2006/05/10(水) 07:53:09 ] >>443 ヒント:protected
445 名前:デフォルトの名無しさん mailto:sage [2006/05/10(水) 08:03:25 ] ∩___∩ | | ノ\ ヽ | / ●゛ ● | | | ∪ ( _●_) ミ j 彡、 |∪| | J / ∩ノ ⊃ ヽ ( \ / _ノ | | .\ “ /__| | \ /___ /
446 名前:デフォルトの名無しさん mailto:sage [2006/05/10(水) 09:37:44 ] そもそも >>440 は論旨が不明瞭。
447 名前:デフォルトの名無しさん mailto:sage [2006/05/10(水) 21:37:28 ] >>440 const_iterator が持ってる二つの機能って何?
448 名前:デフォルトの名無しさん mailto:sage [2006/05/10(水) 22:15:58 ] constとiterator
449 名前:デフォルトの名無しさん mailto:sage [2006/05/10(水) 22:22:03 ] >440 NVIは言いたいことは解らないでもないが、 今のところ、わざわざそうするべき状況に出会った事がないから実感が持てない。 >const_iterator 要素のconst性とコンテナのconst性のこと?
450 名前:デフォルトの名無しさん mailto:sage [2006/05/20(土) 12:35:41 ] Cで組み込み系(ファーム開発など)をやってる人は これを読んだらどう? ttp://www.amazon.co.jp/gp/product/4789833399/503-6690732-8287916?v=glance&n=465392
451 名前:デフォルトの名無しさん mailto:sage [2006/05/20(土) 12:55:52 ] >>450 面白そうな本だね。俺、別に組み込み系とかやってるわけじゃないけど、 今度、本屋に行った時に読んで良さそうだったら買ってみるよ。
452 名前:デフォルトの名無しさん mailto:sage [2006/06/01(木) 23:25:48 ] >>450 MMSといったら悪名高きDシリーズじゃないか。
453 名前:デフォルトの名無しさん [2006/06/29(木) 06:20:08 ] >127あたり vc++使っててchar(...)みたいなキャストができることを知って多用してます。 ほかでもOK?
454 名前:デフォルトの名無しさん [2006/06/29(木) 06:23:13 ] アクセッサとメンバ。get〜set〜とかくのが面倒なのでこんな感じ class Foo { int m_hoge; int hoge() { return m_hoge; } void hoge(h) { m_hoge = h; } };
455 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 06:30:29 ] >>347 面白いんだけどスルーされてる?
456 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 08:01:47 ] >>453 関数型キャストはいつでも使えるわけではないし、折角C++には濫用防止の戒めを兼ねて テンプレート型キャストがあるのでそちらを使うべきです。 実数値を整数値に丸めるときなんかは(仕様を承知で) int(sin(...))なんて使うのはありだと思いますが。
457 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 08:02:23 ] >>455 コピペに反応しろと?
458 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 09:59:51 ] >>457 あれってコピペなの?的確なレスだと思うけど。
459 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 11:28:34 ] >>458 ttp://google.co.jp/search?q=そんなの微妙すぎ
460 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 11:42:48 ] >>459 それは知ってる。っていうか、それ知らないと面白くない。
461 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 12:07:07 ] cは限りなく正解に近いw
462 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 18:12:19 ] >>453 その形式のキャストも標準C++のうち。正確にはコンストラクタ呼び出しの構文。 いまさらだけど、>>127 D&E読め、static_castの類はわざと読みにくく作られている。
463 名前:デフォルトの名無しさん [2006/07/01(土) 17:36:38 ] 実務でCのソースみると、グローバル変数を多用する 人がほとんどなんだけど、どうして? 構造体も使わないし、自分でやってて分け分からなく ならないのかな? グローバル変数多用派のご意見をお聞きしたい。
464 名前:デフォルトの名無しさん mailto:sage [2006/07/01(土) 17:38:43 ] 関数に引数を渡したりするのが面倒くさいんだろう。
465 名前:デフォルトの名無しさん mailto:sage [2006/07/01(土) 18:32:19 ] >>463 過去の汚物を引き継いでるプロジェクトほどその傾向が強い。 一部の教条主義者はローカル変数は遅い、構造体は遅い、と信じていたりするし。
466 名前:デフォルトの名無しさん mailto:sage [2006/07/01(土) 19:30:01 ] >>463 別言語がメインの開発者
467 名前:デフォルトの名無しさん mailto:sage [2006/07/01(土) 21:42:19 ] あえて言語を特定しないのですね
468 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 20:55:31 ] >>454 趣味グラマ的には思いっきり環境依存してる‥‥ class Foo { int m_hoge; int get_hoge() { return m_hoge; } void set_hoge(h) { m_hoge = h; } __property int hoge = { read=get_hoge, write=set_hoge }; };
469 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 23:46:12 ] >>468 他の環境に移植することが予め無いってわかってるんだったら仕事でも 処理系依存の機能を積極的につかってもいいと思うぞ。
470 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 19:09:54 ] スレッド間のフラグとか、めんどくさい時は 外部変数にしちゃってるわ。
471 名前:デフォルトの名無しさん mailto:sage [2006/07/05(水) 11:12:03 ] >>463 プロジェクトの規模が小さいのでは? まぁ、品質管理が最低なことには変わらんが・・・。
472 名前:デフォルトの名無しさん [2006/07/29(土) 20:30:38 ]
473 名前:デフォルトの名無しさん [2006/08/19(土) 16:27:01 ]
474 名前:デフォルトの名無しさん mailto:sage [2006/08/19(土) 16:28:24 ] >>472 >>473 保守乙
475 名前:デフォルトの名無しさん [2006/08/23(水) 08:51:36 ] 空行,どんな感じで使う?
476 名前:デフォルトの名無しさん mailto:sage [2006/08/23(水) 09:05:45 ]
477 名前:デフォルトの名無しさん mailto:sage [2006/08/23(水) 09:17:46 ] >>475 ・複数行にわたる宣言(および定義)が連続する場合は 1行以上の空行で区切りを見つけやすくしておく。 ・1行以上を占めるコメントの前には空行を置き、コメントが 後続のコードに関するものであることを明らかにする。 言葉にするのは難しいな。
478 名前:デフォルトの名無しさん mailto:sage [2006/08/23(水) 09:45:59 ] printf("hello"); と printf( "hello" ); と printf ("hello");
479 名前:デフォルトの名無しさん mailto:sage [2006/08/23(水) 12:26:32 ] ケースバイケース
480 名前:デフォルトの名無しさん mailto:sage [2006/08/29(火) 15:55:23 ] 基本的に使わない。 関数/メソッドの区切りにのみ使う。
481 名前:デフォルトの名無しさん mailto:sage [2006/11/15(水) 13:30:42 ] EmacsでCのソース書いてるが、コーディングスタイルは gnu, k&r, bsd, stroustrup, linux 等が設定できる。 我流コーディングスタイルの癖を付けたくないんでとりあえず 好みに近いstroustrupを選んでるが・・・ gnuスタイルはキモイ。(さすがrms...)
482 名前:デフォルトの名無しさん [2007/02/06(火) 17:04:51 ] if (ptr != NULL) ...; if (ptr == NULL) ...; と if (ptr) ...; if (!ptr) ...; はどっちがいい?
483 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 17:49:23 ] 他人に見せる可能性がある場合は後者。
484 名前:483 mailto:sage [2007/02/06(火) 17:54:12 ] じゃなくて前者。ごめん。
485 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 18:44:13 ] if (ptr) が好きなんだけど ptr != NULL の方が多数派なんだよなぁ
486 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 22:10:20 ] >>482 プログラムの動作を口に出して読んでみれば、前者のほうが自然だと感じられる。
487 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 23:37:07 ] if (ptr != NULL) if ptr is unequal to NULL if (ptr == NULL) if ptr is equal to NULL if (ptr) if ptr is valid if (!ptr) if ptr is invalid
488 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 23:41:12 ] ヌルで無いことと valid であることは同値ではないぜ。
489 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 23:47:22 ] だから?
490 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 23:57:56 ] if ptr points something if ptr points nothing
491 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 00:33:08 ] で?
492 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 02:04:50 ] if(ptr->isValid()) isValidはNULLとかinvalidポインタでも動くようにstaticメンバ関数で
493 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 02:26:16 ] それどうやって使うの?
494 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 02:40:02 ] >>493 おまいが訊いてのは使い方? それとも作り方? 使い方なら、そのまんま >>492 の通りなんだが。 って、よくみたら>>492 はアホなこと書いてるな。 staticメンバ関数にしたら意味がねぇだろが。
495 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 05:06:30 ] だから?
496 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 06:08:34 ] このナポリタンは高速移動をしていないと言える。
497 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 06:11:08 ] それからどした?
498 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 11:25:10 ] >>492 ヌルに -> した時点で未定義動作。
499 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 20:56:17 ] >>498 そんなことはないだろ。これは普通に動くし。 #include <iostream> class null { public: bool isnull() const {return this;} }; int main() { null* ptr; if(ptr->isnull()) { std::cerr << "null !" << std::endl; } return 0; }
500 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 21:13:48 ] いいえ、未定義です。あなたの処理系が動くようなコードを偶然吐いているだけです。
501 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 02:25:41 ] >>499 NULLどころか、ポインタを初期化すらしていない件について。
502 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 05:48:05 ] 馬鹿な>>499 がいるスレはここですか?
503 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 10:38:16 ] 499のコンパイラは警告すらはかないのか
504 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 13:52:54 ] >>499 の書いたプログラムは怖くて実行できません。
505 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 15:24:24 ] 初期化しないポインタがヌルにならないのは大問題のような気がしてきた Javaみたいにぬるぽガッってなってくれたほうが安心だな 499みたいなのを見るとそう思う。
506 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 15:53:19 ] >>505 C/C++ の本質は高級アセンブラだから、パフォーマンスが犠牲に なるようなことは原則として勝手にやらない。 まぁ、お前みたいなヤツはJavaなりC#なりでも使ってなさいってこった。
507 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 18:36:29 ] C++ならスマポ使うから無問題
508 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 21:13:22 ] そうか、そうなのか。うーん、なるほど。
509 名前:499 mailto:sage [2007/02/08(木) 21:44:32 ] >>500 ああ、ごめんごめん。ptr = 0 の初期化と return this == 0 に直してね。 それはともかく、単純なクラスの非静的メンバなら、暗黙の this 引数を 0 に しても呼び出せるのは自明だ、ということが言いたかったんだけど、それ すらも未定義ということ?
510 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 21:48:10 ] コンストラクター コンスという名前のトラクター
511 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 21:49:57 ] どうなんだろうね。 どっちにしてもお行儀が良いとは言えないけど。
512 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 21:51:04 ] >>509 最初から未定義だって言ってるだろ。
513 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 21:59:13 ] >>509 ほぼすべて環境で問題なく動作すると思われるが、 それとこれとは関係ない話で、未定義は未定義。
514 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 22:06:16 ] >>499 のように動かない実装上の理由は想像しにくいが、 ある日ある時ある環境でカーネル破壊して落ちてもそれは「正しい動作」となる。 未定義というのはそういうことじゃないかね。
515 名前:499 mailto:sage [2007/02/08(木) 22:55:56 ] >>513-514 そうだね。つまらんことに粘着してスレ違いネタを続けてすまんかった。
516 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 23:44:52 ] >>515 やっぱりお前は馬鹿だな。
517 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 08:25:54 ] >>506 でも現実として、「変数は必ず初期化しろ」みたいなTipsが解説書に書かれる訳で、 パフォーマンスの為にコンパイラが自動でやらないことを 結局プログラマがコードで書くのは馬鹿馬鹿しい気がするよ。
518 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 08:57:01 ] >>517 初期化してない変数を勝手に 0 で初期化して 実行時コストを伴いながらプログラマの選択肢を 奪うことには議論の余地がある。 言語デザインの面で考えるのであれば、 未初期化な変数定義を認めないのが正解だと思う。
519 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 11:04:28 ] 「変数は必ず初期化しろ」の類はナンセンスにしか思えない そもそも未初期化でバグるようなコードは 必要な前処理を怠っているという点でそれ自体が潜在的なバグであって、 盲目的な初期化をさせたところで、(必要な前処理をやっていなければ) バグの顕在化を遅れさせるだけだと思う あとこういうケースで初期化させるのも無意味だと思う int a /* = 0 */; if (ある条件) { 長い処理; a = 何か; } else { 他の処理; a = 違う何か; } ここでaを使う;
520 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 12:15:43 ] int a = ある条件 ? (長い処理 , 何か ) : (他の処理 , 違う何か); ここでaを使う
521 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 16:03:45 ] もっと簡単にローカル関数を定義できれば便利なんだけどと 思うことはよくある。
522 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 19:10:06 ] 別に今のままでも支障はないんだけど、 初期化不要宣言をしたときだけ 初期化されない仕様でもいいかもしれない。
523 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 19:27:23 ] >>520 長い処理って書いてるやん。お前それ一行で書く気かよ。 第一whileとかが入ってたら展開できないぞ。 関数化するってのは無しな。
524 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 01:19:41 ] >>523 なんで無しなの? 関数にしとけばaをconstにできるし、 長い処理ってのはそれ自体のコストが大きい可能性が高いから、 一回だけの関数呼び出しのコストなんて気にする状況じゃないと思うが。
525 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 02:04:51 ] 関数化してもしなくても単純に読みづらい。 最後の値が代入されると直感的に理解しにくい式になることが予測できる。
526 名前:デフォルトの名無しさん [2007/02/16(金) 12:35:32 ] ヘッダーで using namespace std するのは、よくないよね。
527 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 12:36:18 ] うん。
528 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 12:59:28 ] int *p1, *p2, *p3;
529 名前:デフォルトの名無しさん mailto:sage [2007/04/16(月) 02:32:39 ] int a; { int a; /*hogehoge no syori*/ } なんてのはよく使う
530 名前:デフォルトの名無しさん mailto:sage [2007/04/16(月) 17:25:11 ] shadowは嫌いだなあ
531 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 04:18:53 ] 保守age
532 名前:デフォルトの名無しさん mailto:age [2007/06/08(金) 05:05:16 ]
533 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 07:52:10 ] プロパティ欲しい。
534 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 16:47:05 ] 結局protectedってどうやって使ったらいいんでしょう(´・ω・`) friendはファクトリクラスからのみ作成するようにする場合に保険の意味も兼ねて テンプレートのファクトリクラスに対して指定してつかってますが…
535 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 16:57:00 ] >>534 必要だと思うまで使わなくていいよ。
536 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 21:51:07 ] ポリシークラスのデストラクタはprotectedにすべし、とかあったような
537 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 22:28:36 ] 自然とprivate基本じゃなくてprotected基本で作るようにならねえか?
538 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 22:30:16 ] >>537 そんなバカな。カプセル化壊れまくりんぐじゃねーか。
539 名前:デフォルトの名無しさん mailto:sage [2007/06/10(日) 13:27:45 ] >>537 中卒溶接工童貞DQNハッケソ!
540 名前:デフォルトの名無しさん mailto:sage [2007/06/10(日) 16:21:33 ] まだカプセル化なんて、宗教信じてんのか。 醍醐味は、ポリモーフィズムとdynamic_cast 〜COM/ActiveXだろ。 日本で書かれた糞本読んでるとそうなります
541 名前:デフォルトの名無しさん mailto:sage そんな餌に俺がクマー(AA略 [2007/06/10(日) 23:31:38 ] それもJava教っぽいなあ
542 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 01:33:36 ] コンストラクタで初期化リストを書き並べるのは、どう書くのが正しいんだろうか? class Hoge { Foo foo_; Bar bar_; FooBar foobar_; public: Hoge(Foo const& foo, Bar const& bar) : foo_(foo) , bar_(bar) , foobar_(foo, bar) { // 処理 } }; 自分はこんな感じでコロンとカンマを並べてるんだが、果たして変だろうか
543 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 02:10:16 ] 英文を見慣れた人間にとっては、単純に気持ち悪い。 日本語で読点を先頭に書くようなもんだからね。
544 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 03:08:49 ] キモいんだけど、このスタイルのほうが理に適ってるんだよねぇ。
545 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 04:18:26 ] 外人でも:先頭で書く人いるから英文云々はあまり関係ないんじゃないの?
546 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 04:34:38 ] >>545 >544
547 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 12:08:22 ] >>546 >547
548 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 23:13:12 ] 最近 カプセル化 って言葉を発することが恥ずかしいと 思うのだが、 俺だけ?
549 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 23:17:20 ] なんでだよ。
550 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 11:15:09 ] 行末のコメントってどうしてますか? タブで揃えた場合、タブのスペース数が変わるとずれてしまうし・・・
551 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 11:25:16 ] 揃えようとするのが間違い。 しかし世の中にはおかしな風習が残っている会社もあって、 行内コメントは必ず45カラムから始めて79カラムまでと決められていたりもする。
552 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 14:21:04 ] >>550 タブはコードの前までしか使わない。 (ここだけタブ)x: (ここにはスペース) // コメント まあ、手動でスペース調整してコメントの位置そろえても、 最近は Visual Studio の整形機能とかでスペース消されちゃうけどね。 >>551 の言うとおり、そろえようとするのが間違いかと。
553 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 16:29:39 ] そこでマクロですよ
554 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 16:30:46 ] そもそも行末にコメントを置かなければいいわけだ。
555 名前:550 mailto:sage [2007/06/17(日) 17:19:59 ] なるほどー。 色々アドバイスありがとうございます。
556 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 11:36:38 ] >>544 配列の初期化や enum の最後に余分なカンマがあってもいいのは 何でだと思う? (enum のは C だけか。)
557 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 22:36:06 ] >>556 なんか例えが変な気が。 enum の最後とかは、 例えばスクリプトで自動生成したりするときに、 最初または最後の行だけ特別扱いしなくてもいいから。 >>544 が言いたいのは、 , が行頭にある方が、 前の行から続いてることがわかっていいんじゃね? ってことでは。
558 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 23:11:13 ] 話が逸れるが 関数のオーバーロードとかtemplate引数の数で擬似オーバーロードとかなら Boost.Preprocessorで量産したりするけど、 enumを自動生成したりする機会なんてあるかな。 コード上ではほとんどトークンの列挙だけだから、 普通手打ちでやるんじゃね?
559 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 02:24:36 ] >>558 なんかのデータベースからデータを抽出して、そいつらの ID を列挙するときとか。
560 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 09:53:20 ] Boost.Preprocessorってググったんだけど、どっか 詳しいページない?
561 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 11:16:38 ] >>558 手打ちでやるにしても、最後の行だけ特別扱いってのを気持ち悪がる人いるよ。
562 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 15:09:48 ] >>560 www.boost.org/libs/preprocessor/
563 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:08:54 ] int *a, b, *c, &d; // OK?
564 名前:デフォルトの名無しさん [2008/02/24(日) 17:29:08 ] #include ""は.cppに#include<>は.hファイルに書くでOK?
565 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:31:02 ] NG
566 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:48:04 ] 仕事でSymbian使い始めてからSymbianのコーディングスタイルに毒された。 引数はaFooで内部変数はiFooとか。
567 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 18:07:47 ] >>564 標準インクルードファイルは<>で括って、ローカルインクルードファイルは""で括る。 それらの中間に当たる、非標準の汎用インクルードファイルやプロジェクト外の共通インクルードファイルは適宜決めること。
568 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 00:38:01 ] ふむふむ
569 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 12:22:58 ] 標準のいんくを""でくくってもOKだったり、検索パスも同じ?機能的な違いが判らん。
570 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 12:35:27 ] >>569 ""で括った場合は、先ずカレントディレクトリを探す。それ以外は<>と同じ。 つまり、間違って"stdio.h"なんてファイルを作ってカレントに置いたとしても、 <stdio.h>でインクルードしていたらそんなの関係ない。 汎用ライブラリのインクルードみたいなものは、<>で括ってサーチパスに追加するのが無難。 厄介なのは、自分のプロジェクト外だが標準ではなくて、更新の可能性もありそうなファイルかな。 仮に、プロジェクトから見て"../common/include/someHeader.h"だるとして、次のどれかを採用することになると思う。 ・#include <someHeader.h>してサーチパスに"../common/include"を追加。 ・#include <include/someHeader.h>してサーチパスに"../common"を追加。 ・#include "../common/include/someHeader.h"する。 # 絶対パス指定はするべきではない。 Unix系なら、こんな手段もある。 ・#include "common/someHeader.h"して、ln -s ../common/include commonする。
571 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 01:18:53 ] >>570 一般的には処理系依存だよ。どのコンパイラの解説をしてくれているのか明示してくれ。
572 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 04:32:09 ] 一般的にはどの処理系でも当て嵌まりそうだが。つーか、最後の一行についてはunix系と明示しているし。
573 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 07:27:29 ] >>572 「どの処理系にでも〜」っていう根拠は何かあるの? 規格にあるのは、 "" に対する処理系依存の検索で見つからなかったときには <> と指定されたかのように処理しなおすこと。そして <> の検索方法もまた処理系依存。 あと、最後の一行がそれより上の説明をUnix系の話に限定するわけじゃないだろ。
574 名前:570 mailto:sage [2008/02/26(火) 13:53:08 ] >>571 一般的なコンパイラの話。 私の知る限り、よく使われるコンパイラで大きく逸脱しているものは無いと思うので。 違う例があるなら、指摘してくれれば嬉しく思います。
575 名前:571 mailto:sage [2008/02/27(水) 00:30:15 ] >>574 とりあえず gcc は明示的にオプションで指定されない限りカレントディレクトリを 探したりしない。 -iquote なんてオプションもあって、 >570 とはまるで挙動がちがう。 gcc.gnu.org/onlinedocs/cpp/Search-Path.html gcc を含めずに「一般的なコンパイラ」というのはさすがにあんまりだと思うよ。
576 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 00:47:59 ] 一般的なコンパイラって何?
577 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 00:59:10 ] gcc が違うとなると、それも聞きたいな。
578 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:50:16 ] gccでは、""で括ったインクルードファイルをカレントから探してくれないと言う 素っ頓狂なことを>575は言いたいらしい。 では聞くが、カレントにあるインクルードファイルをインクルードするにはどうしたらいいのかね?
579 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:59:07 ] >>578 カレントにあるソースをコンパイルするとか、 -I. を指定するとか。 リンク先読んでないの?
580 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 02:00:11 ] なんだろ、>575=>571は単純な読み違いをして駄々を捏ねているのか、 それともなにやら深い勘違いをしているのだろうか。或いは単純に、 >570が「カレントファイルのあるディレクトリ」を「カレントディレクトリ」としたことが気に入らないのだろうか
581 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 02:01:02 ] あーなんだ、3行目だったかw
582 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 02:25:33 ] なんだ、そういうことか。その意味でカレントディレクトリと言うのはやめといたほうがいいよ。 www.google.co.jp/search?q=%e3%82%ab%e3%83%ac%e3%83%b3%e3%83%88%e3%83%87%e3%82%a3%e3%83%ac%e3%82%af%e3%83%88%e3%83%aa で、「カレントファイルのあるディレクトリ」を検索してくれないコンパイラなら、 一気にマイナーになるけど、ルネサスのコンパイラがそう。こっちは逆に 特に指定しない限り一般的な意味での「カレントディレクトリ」しか見ない。
583 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 23:00:17 ] unsigned int はどんな風にtypedefしてますか? 1. typedefしない 2. BSD風に u_int 3. Windows風に UINT 4. その他?
584 名前:デフォルトの名無しさん [2008/03/25(火) 23:06:29 ] 1. typedefしない
585 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 23:23:26 ] 必要ならstdintを使う。それ以外は1.
586 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 00:23:09 ] 4. intを省略する。 static const unsigned FooVal = 0; unsigned func(unsigned foo) {return foo;} for (unsigned ic = 0; ic < sizeof(array) / sizeof(* array); ++ic) { unsigned rtn = func(array[ic]); std::cout << unsigned(sizeof(rtn)); } // などなど
587 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 11:28:51 ] <windows.h>をインクルードしていたらUINTは使うけど、 そうでないときはunsignedにする。自分でtypedefはしない。
588 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 20:35:47 ] サイズが予測できるべきならcstdintの適当な型。 メモリに依存する値、または数や大きさを表すならstd::size_t。 大きさの上限を仮定すべきでないならunsigned。 longは使わない。
589 名前:583 mailto:sage [2008/03/26(水) 23:54:12 ] 皆さん、ありがとうございます。 やはり、統一的な定義はないのですね。 stdintは使っていたのですが、普通の数値までいちいちサイズ指定するのも変かと思いまして。 int省略でいこうと思います。(今まで省略できることを知らなかったなんて言えないよな…)
590 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 01:24:06 ] >>589 int の省略は一般的じゃないから、あんまりおすすめできないなー。 省略できるのを知らない人はざらに居るよ。初めて目にした人を いちいちびっくりさせるのはよくないと思う。 サイズ指定するのが変だと思うなら、 unsigned int って書いても 問題は解決してるでしょ。
591 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 07:43:36 ] でも、unsigned short int と書く香具師は少ない。
592 名前:583 mailto:sage [2008/03/27(木) 23:23:24 ] >>590 ついこの間までWindowsばっかりでUINT慣れしてたせいか、長く感じてしまうんですよ。 たしかにunsigned単体って見かけないし、4文字しか減らないし、 省略しない形に慣れた方がいいような気がしてきました。
593 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 23:23:47 ] そもそもshort intと書かない
594 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 23:26:01 ] typedef unsigned uint;
595 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 23:36:16 ] C++で、void a(void)とvoid a()はどっちがお勧め?
596 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 00:38:01 ] void a() コンストラクタも同じ表記だから
597 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 00:41:24 ] どっちを呼びたいの?
598 名前:597 mailto:sage [2008/03/28(金) 00:55:47 ] _| ̄|○ >596 に一票入れとく。
599 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 02:19:32 ] a(void)きもい→a()にしようって過去があるからa()を推す。
600 名前:595 mailto:sage [2008/03/28(金) 12:39:12 ] >>596-599 回答ありがとう。満場一致でvoid a()なのね。俺もvoid a()に統一するよ。 Cからの流れで(void)って書いてただけだから、書かなくていいC++では違和感を常々感じてましたです。
601 名前:デフォルトの名無しさん mailto:sage [2008/03/28(金) 22:06:19 ] その表現には違和感を覚えるな。
602 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 20:30:40 ] 頭の頭痛が痛くなってしまうな。
603 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 17:20:40 ] if( Func( GetUnko( a ), reinterpret_cast< void * >( b[ c + d ] ) ) ); こんな感じの書き方が好きです。
604 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 13:43:30 ] >>600 自分はa(void)派。 理由は一目で関数呼び出しと区別できるからかな。 そんなに強い理由じゃないし、こだわりはあまりないけどね。
605 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 13:47:03 ] >>603 あ〜自分もそう。一時変数はなるべく作りたくない。 でも意味がわかりにくいと思ったら、一時変数作るか関数にする。
606 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 16:58:42 ] >>604 やめて。コンパイル通らないから
607 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 19:17:32 ] そうなの?どの環境で?
608 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 22:07:01 ] C++
609 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 22:09:55 ] >>608 C++ の関数宣言でも (void) は引数リストとして有効だよ。 C とは違って typedef された void は受け付けないらしいが。
610 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 01:37:52 ] あら そうやった? VC++のバージョンとが上がると急にエラーになったりする ことになるから、 書かない方がいいと思うよ<(void)
611 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 07:36:49 ] 何か勘違いしている悪寒。
612 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 07:54:49 ] >>610 ねーよ。
613 名前:607 mailto:sage [2008/05/12(月) 20:41:19 ] >>610 ないな。いまのところ。6〜9はOKと思われ。 言語仕様は正確に知らないが。
614 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 21:03:09 ] 8.3.5 関数 ... <<仮引数宣言節>>が空の場合、その関数は実引数を受け取らない。 仮引数並びが(void)の場合、空の仮引数並びと同等とする。... だそうだ
615 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 01:42:22 ] そうか俺の勘違いだった。すまぬ。 互換上の仕様だけど今後も残りそうな仕様だな
616 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 12:18:02 ] (void)のコードが山のようにあるからそうそう消せないだろうし、弊害がるわけでもないしって所じゃないかな。
617 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 12:42:46 ] >606 は、604が戻り値を省略したからコンパイルが通らないと主張しているのだと思ってた。
618 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 13:08:24 ] >>617 それだと戻り値省略で void になるとかいう話になっちゃうだろ。さすがにそれは無い。
619 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 17:55:53 ] 仮引数の命名規則というものを見たことが無いのですが、 普通は考えないものなのでしょうか? 例えば引数で値を返す関数の場合 bool func( int* val_ ){ *val_ = 0; // 取り合えず 0 int val; .. ローカル変数 val をいじる処理 .. *val_ = val; // 返却 return true; // 成功 } みたいにすると分かりやすいと思っているのですが こんな事考えてるのは自分だけ? どうでも良いけどメンバ変数は m_ 派です
620 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 19:15:58 ] 引数はたまたま宣言場所がちょっと上の方にあるだけのローカル変数みたいな感じだからなぁ。 ローカル変数と全く同じ命名だわ。
621 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 19:29:57 ] 仮引数の命名規則と実装の話がどう繋がっているのかわからない。 val_が関数利用者側から意図を汲みやすい名称かという話なら 意味不明ぐらいの感想しかない。ヘッダのみ提供ならなおさら。 val_が失敗成功に関わらず0で初期化される、成功時に結果が設定されるという話なら ヘッダに利用上の注意としてコメントを残しておくだけだろう。
622 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 19:52:01 ] 失敗なのに0クリアされるような関数は嫌いだ。
623 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 23:20:10 ] ちゃんとコメント書くからそんなことする必要ない dest という変数名は使うことはあるけど
624 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 10:35:46 ] >>621 実装者視点の話と思うよ。(関数利用者側のメリットはなさそう) 619の例だとローカル変数と衝突しなくてすむ。 自分は前はp_(pはパラメータの意)をつけたり 619のように最後に_つけたりしてたけど 今は何もなし(ローカル変数と同じ)だな。 ちなみに_最後につける方法はメンバ変数にする場合も見かけるね。
625 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 11:20:04 ] 関数のプロトタイプの一覧だけ渡されたときに、仮引数にわけの分からん修飾がしてると気持ち悪い。
626 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 11:34:07 ] そんなの宣言と実装で名前変えられるじゃん。 実装は接頭辞付きって規則で統一した上で。
627 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 12:06:18 ] 果たしてそこまでして接頭辞をつけるほどの利点はあるのだろうか
628 名前:624 mailto:sage [2008/06/01(日) 13:53:55 ] 他人のソースを読むときに、あったほうがいいと思ったことがある。 でも関数が長いとか変数名が変とか、設計上の問題のせいかも知れない。 設計が良い場合は思わなかった気がするな。
629 名前:デフォルトの名無しさん [2008/07/31(木) 02:40:40 ] ほす
630 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 13:04:03 ] ++i; i++; どっち
631 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 02:08:49 ] i++;
632 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 02:19:05 ] 演算子多重定義があるから++i;
633 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 21:37:45 ] >632 はしょりすぎじゃね? i++ だとインクリメント前の値を返す無駄な処理が発生する→最適化されたら同じじゃね? →演算子多重定義があるから一般には最適化できない
634 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 21:57:51 ] →それに合わせて、組込型であることが明白な状況でも++i使うようになる
635 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 23:22:15 ] 後置である必要がなければ前置を使おう
636 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 06:15:46 ] 203++;
637 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 02:09:53 ] つまりC++ではなく++Cだと言いたいわけだね
638 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 03:19:20 ] もともとCへのトランスレータだったから、返ってくるのがインクリメント前のCなのが正しいのだ。
639 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 03:25:48 ] ++C++
640 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 01:21:30 ] >>639 error C2105: '++' には左辺値が必要です。
641 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 13:33:11 ] Д-C-Д
642 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 13:50:32 ] +(+C++)
643 名前:デフォルトの名無しさん [2008/10/26(日) 01:53:44 ] C/C++ Coding Style Thread pc11.2ch.net/test/read.cgi/tech/1096687703/
644 名前:デフォルトの名無しさん [2008/10/26(日) 01:56:27 ] 関数ポインタの配列を返す関数へのポインタを引数に取り、 関数ポインタの配列を返す関数ポインタの配列を返す関数について、 どのように書くのがよいですか? 1. typedef使う場合 2. typedef使わない場合 でよいので記述せよ。
645 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 02:17:14 ] 宿題スレ行け
646 名前:デフォルトの名無しさん [2008/10/27(月) 00:03:46 ] >>645 ぷぷ(w 解らないやつ発見(w
647 名前:error C743: 名前がありません。 [2008/10/27(月) 00:05:10 ] 「デフォルトの名無しさん」ってだっさくない? ダサいよ。うんダサい。 ということで、 [error C743: 名前がありません。] にしようぜ。というか、しろ。 さっさと変更依頼だせ。
648 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 00:09:42 ] ここ自治スレとかの類ではないよ。
649 名前:error C743: 名前がありません。 mailto:sage [2008/10/27(月) 03:17:17 ] >>645 ,>>646 痛いな、関数は配列を返せません。 void (* (* (* function(void (* (* var(void)) [])(void)) [])(void)) [])(void); 当然、配列返そうとしているから、間違えだけど。 void (* (* (* functionz(void (* (* var(void)) [])(void)) [])(void)) [])(void); たしかに、この名前いいな。
650 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 14:11:35 ] 関数は配列を返せるだろ。
651 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 14:43:29 ] 配列の先頭要素を指すポインタなら返せる それで充分かどうかは場合による
652 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 14:55:05 ] 十分ていうより配列なんか値で返すのは非効率じゃね? でも、構造体でくるんだら値でも返せる。
653 名前:デフォルトの名無しさん mailto:sage [2008/12/28(日) 16:53:21 ] 上の方でprotectedの変数アクセス云々の話があったが 例えばsinを子に公開しているクラスがあったとして、 class A { protected: static double sin[0x10000]; }; 初め高速化の為に配列で準備していたのをWindowsCEなんかの 低リソース環境に移植するために class A { protected: static double sin(double); }; にしたくなった。そいう時子class全域に広まる影響はどうするんだろう? 初めから、関数アクセスに限定してれば何にも危惧すること無いのにな。 話は変わるが、趣味範囲でプログラムを書くとき class T { int value; public: int Value(void)const; //getter int Value(int); //setter }; 見たいな感じでよくね?と思う。まず、setterとgetterを間違えることないし、 テンプレート関連で多少融通が効いて便利。 あと、Mozila関連の規約はなかなか面白いね。 https://developer.mozilla.org/Ja/C___Portability_Guide
654 名前:デフォルトの名無しさん mailto:sage [2008/12/28(日) 18:00:48 ] >>653 その下駄は兎も角、雪駄は何故intを返すんだ?
655 名前:デフォルトの名無しさん mailto:sage [2008/12/28(日) 18:10:14 ] 元の値じゃね?
656 名前:デフォルトの名無しさん mailto:sage [2008/12/28(日) 19:21:51 ] T a; int b; b=a.Value(5)+3; てな事をするため。 まぁ、T&を返してもいいんだけど。 b=a.Value(5).Value()+3; ってなんだよなぁ。
657 名前:デフォルトの名無しさん mailto:sage [2008/12/28(日) 20:44:08 ] >>653 protected メンバ変数なんて使わない。 広まる影響については、自業自得ということでがんばれとしか言えない。 getter/setter にルールを決めるなんてナンセンス。 普通に、クラスに必要なインターフェースをクラスごとに考えろ。 Mozzila のそれはいい加減に古すぎるし、大量のコンパイラを 想定する必要なんてないことがほとんど。
658 名前:デフォルトの名無しさん mailto:sage [2008/12/28(日) 21:12:44 ] そもそも下駄雪駄を無駄に作るのは、privateの意義を半分くらい失うってことだしね。
659 名前:デフォルトの名無しさん mailto:sage [2008/12/28(日) 21:13:55 ] もっずぃら
660 名前:デフォルトの名無しさん mailto:sage [2008/12/28(日) 21:33:45 ] Mozilla 、な。
661 名前:デフォルトの名無しさん mailto:sage [2008/12/28(日) 21:46:39 ] オープンソースではとりあえず private にされるとめんどい。 あるクラスを使っている別のファイルでその変数にアクセスしたい時、 setter/getter を作らなければならなくなるので、 その別ファイルだけの diff だけではなく、クラスのファイルの diff も必要になる。
662 名前:デフォルトの名無しさん mailto:sage [2008/12/28(日) 21:48:51 ] なんでこうカプセル化を堂々とぶち壊すアホが後を絶たないかね。
663 名前:デフォルトの名無しさん mailto:sage [2008/12/28(日) 22:08:14 ] カプセル化のメリットを理解してないからじゃね?
664 名前:デフォルトの名無しさん mailto:sage [2008/12/28(日) 22:12:25 ] >>661 >>653 見たいな事になったらどうすんの? 例えば、時間を管理するとしてlongの変数一つで扱うか hour,minuts,secondと3つに分けて扱うとか いくらでもprivate領域は変えられるんだからね。
665 名前:デフォルトの名無しさん mailto:sage [2008/12/28(日) 22:53:31 ] 誰でも若い時分には他人の培ってきたノウハウに対して懐疑的になり、 例えばグローバル変数を利用してピンポイントの効率化を行なって悦に入り、 そうはしない他人よりも自分の方が能力があると錯覚してしまう時期があるもんだよ。 斯く言う私も、10代の頃はそうだった。
666 名前:デフォルトの名無しさん mailto:sage [2008/12/28(日) 23:09:32 ] カプセル化のメリットよりも、パッチを投げにくいデメリットのほうがでかいことがある。 カプセル化のデメリットを考えずにメリットだけを信じるというのは思考の停止である。 偉い人が唱えたアイデアを盲信せずに、自分なりにメリット、デメリットを考えてみる。 そういうステップを踏んでみると、メリット、デメリットの「度合い」というものも状況によって異なることに気付けるはずだ。 あえてカプセル化を採用しないコーディングスタイルもありうるかもしれない、と気付けるはずだ。 >>662-664 君達はそこまで考えたことがないのだろう。 カプセル化至上主義ですか…。try{} catch{} のエラー処理は常に使用すべきですか?
667 名前:デフォルトの名無しさん mailto:sage [2008/12/28(日) 23:10:58 ] >>665 そういうステップを踏んできたのならいいだろうね。
668 名前:デフォルトの名無しさん mailto:sage [2008/12/28(日) 23:16:46 ] つまり、自分勝手な改修を行ないたいがためにカプセル化のデメリットがあるとほざいているのか。 もっと真っ当な解決策がそこにあるかもしれないのにそれを模索しようとしない姿勢こそが思考停止ではないのかな?
669 名前:デフォルトの名無しさん mailto:sage [2008/12/28(日) 23:17:00 ] オープンソースにおいて、 関数は可能な限り private メンバ関数にすべきですか? それとも全て public メンバ関数にすべきですか? メリット、デメリットを一緒に教えてください。 自分なりの解答はありますが、皆さんの意見を教えてください。 できれば議論の形になっていただけるとうれしいです。
670 名前:デフォルトの名無しさん mailto:sage [2008/12/28(日) 23:19:38 ] オープン開発なら、能う限りprivateにすべきだと思うがね。
671 名前:デフォルトの名無しさん mailto:sage [2008/12/28(日) 23:28:21 ] いや、オープンとか関係ないから。
672 名前:デフォルトの名無しさん mailto:sage [2008/12/28(日) 23:40:19 ] >>661 その理屈で public にしてるとさ、元のクラス側の実装を変更しようと思った時には 逆に使ってる側の別ファイルも合わせて書き換えないといけなくなるんでしょ? 詭弁だよ。もしくは元クラスを書き換える可能性を無視した、浅はかで自分勝手な考え。
673 名前:664 mailto:sage [2008/12/29(月) 08:00:55 ] >>666 昔、嫌々VB6.0で組まされたことがある。それもチームで。 アレには、Classとモジュールと言うのがあって一応カプセル化は できるようにはなってんだ。一つの規約として「変数だけはpublicに するな」を設けた。しかし、メンバーのレベルが低すぎて勝手に変数共有。 そしてカプセル化が破しどこで勝手に変更されてるのか分からない。 依存コードの除去に苦労したよ・・・。 あんな事2度とごめんだ。 オプソでも似たようなもん。勝手に変数共有なんかされるとみんなが困る。 人のことを考えろよ。
674 名前:デフォルトの名無しさん mailto:sage [2008/12/30(火) 11:38:17 ] >>666 様々な試行錯誤を経てカプセル化については メリット>>>デメリットという結論なんだな。 俺も昔はメンバ変数はprotectedで勘弁してよって思ってたが、今ではしっかり設計をすればprivateでokであることが解ってきた。 諦めてカプセル化を壊すことこそが思考停止だとおもう。もう少し設計を見直すべきだな。 カプセル化を壊すのは設計が妥当ではないといういい指標となると思う
675 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 11:08:35 ] メソッドは基本public。理由があればprivate/protected
676 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 11:50:10 ] 俺は必要になるまではなんでもprivateだな。
677 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 14:55:09 ] 外にサービスを提供するのがpublic 内部で使うものはprivate カスタマイズに使うものはprotected
678 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 18:58:19 ] 非公開から公開は簡単。逆は難しい。 だから最初に公開するものはとっても悩む。 他人が使うものを作ると実感する。
679 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 20:46:29 ] 提供されているクラスで(こっちは手を入れれない)でなんでこれが privateなんだよってことがよくある。 あったまくる。最悪。どうしようもない。
680 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 20:58:31 ] >>679 提供元に文句言えよ。
681 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 21:00:18 ] >>679 触って欲しくないからだろ。
682 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 21:25:49 ] >こっちは手を入れれない この頭の悪さが物語っているな。
683 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 22:24:57 ] おまいらつまらんやつらだな。 仲良しとしか組んだことないだろ
684 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 07:25:17 ] どうしようもないときはprivateメンバだろうが何だろうがアクセスすればいいだけだよ。 privateだからとかバイナリしかないとかは大した障害にならないね。
685 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 07:37:09 ] #define private public
686 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 12:42:28 ] >>685 一応それはillegalだよね? だいたいそれでうまくいくけど。 プリプロセッサの段階でそれをdenyする実装ってあるんだっけ?
687 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 13:32:31 ] いやまったく合法だ
688 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 17:53:19 ] ↑↑VCだと、privateとpublicではマングリングが違うため、ソースが(リコンパイルが)必要になる罠
689 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 01:21:34 ] >>688 何が言いたいのかさっぱりわからん。 アクセス修飾変えるんだからリコンパイルが必要なのは当然だが、そこでなんでマングリング? 686の話とどう繋がるのか教えてくれ。
690 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 01:35:49 ] >>689 アクセス指定子によってマングル名が変わるからコンパイルはできるけどリンクできないってことだろ。 リンクするためにはライブラリ?も同じアクセス指定子でリコンパイルが必要ってこと。
691 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 11:02:28 ] いつも思うけど、マングリングってエロいよなw
692 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 11:12:31 ] おまいは中学生か! でも確かにエロいよなぁ
693 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 19:54:11 ] >>690 そうそう。代理での回答ありがとうん
694 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 19:57:09 ] どう書いてる? char ch; //もしかしたら誰かがint chに変えちゃうかも知れない style A) printf("%c", ch); style B) printf("%c", int(ch)); style C) printf("%c", char(ch)); AとCはintへの自動昇格目当てな
695 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 22:51:10 ] >>690 いや、マングリングが変わらなくてもコンパイラがVCじゃなくてもコンパイルとリンクは発生する。(勿論例外はあるけど) なぜ686にそれを指摘するのかが俺には理解できなかったんだわ。 >プリプロセッサの段階でそれをdenyする実装ってあるんだっけ? これ俺も知りたかったから689が何か言おうとしてるっぽいんで理解しようと思ったんだが・・・意味不明だったんで質問してみた。
696 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 23:17:31 ] プリプロセッサ様を妨げるものなんていないよ
697 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 02:34:11 ] プリプロセッサさんマジパネェっす
698 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 04:21:35 ] >>694 A 以外に意味が見出せないんで、何を迷ってるのかわからん。
699 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 20:33:31 ] >>697 わろたw >>698 %c に対する引数は int を与えないといけないので、明示的にキャストするかどうか。 さもなくば可変引数における暗黙の型ルールを把握しておかないといけない。
700 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 00:18:37 ] >>699 そんなもん、%cを学んだ段階で把握できることだろ。 それとも何か、入門書と言う奴はそんなことも書かれていないのか? だとしたら、マニュアルページに補足されているといいかも知れないな。 駄菓子菓子、そのキャストは余りに神経質に過ぎると思うぞ。 それを言い出すと例えば、ch == '\t'なんてのもそのまま書けなくなってしまう。
701 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 00:45:50 ] >>699 キャストしてもしなくても、「可変引数における暗黙の型ルール」を把握しておかないと いけないことに変わりはないはずなんで、何を迷ってるのかわからん。
702 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 07:57:59 ] 入門書は可変引数の場合の型昇格書いてないやん
703 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 08:06:17 ] 入門書を書く奴は、知識がないのに書いているか、判りきっていてて説明できないか、どっちかだろうからな。
704 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 13:25:54 ] template内で使用するなら、可変長引数で型変換の オーバーロードが通じないぶん意味があるかもな。 type a; printf("%c",static_cast<int>(a)); でもまぁ、だったら最初からstd::cout使っとけやって話だが。
705 名前:デフォルトの名無しさん [2009/01/30(金) 09:37:33 ] どこに改行/空白入れる? typedef/usingする? std::list<mylib::common::MyClass<charT>* > container; std::vector<std::basic_string<CharT> > もにょもにょ・・・ std::transform( boost::make_indirect_iterator(container.begin()), boost::make_indirect_iterator(container.end()), std::back_inserder(strs), boost::bind(&mylib::common::MyClass<charT>::format,_1,"%1:%2:%3"); );
706 名前:デフォルトの名無しさん [2009/01/30(金) 09:44:12 ] なんかひどいから書き直す template<class CharT> func(std::list<mylib::common::MyClass<CharT>*> container, std::vector<std::basic_string<CharT> > &strs) { もにょもにょ・・・ std::transform( boost::make_indirect_iterator(container.begin()), boost::make_indirect_iterator(container.end()), std::back_inserder(strs), boost::bind(&mylib::common::MyClass<charT>::format,_1,"%1:%2:%3") ); }
707 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 10:03:06 ] template<class CharT> func(std::list<mylib::common::MyClass<CharT>*> container, std::vector<std::basic_string<CharT> > &strs) この3行は改行しないで一列にしちゃうな。 なんでかっていうと、VC++2008では、{ }内全体を隠す機能があって 1関数/1クラスが1行にまとまって検索しやすくなるので。
708 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 10:40:16 ] 小まめに改行してるソース読むと、いい加減モニタ買い換えろよと思う
709 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 11:07:24 ] 80桁ルールを守る価値はそれなりにあるぞ
710 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 12:17:05 ] 今となっては80桁は窮屈だぞ。
711 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 12:37:23 ] Unix系の端末で快適にソースを閲覧できる状態というのは確かに必要なこともあるし、 80桁ってのはデファクトとしてそれなりの意味があるんじゃないのかな。 事実色んなオープンソースプロジェクトが80桁ルールを守って書かれてるし やろうと思えば全然難しくないしね。 まあ80桁は狭いと思うにしてもせいぜい100桁か120桁くらいが限界じゃないかな。 あまり横に突き出してしまうと、結局折り返しが発生する環境が出てきて、 可読性が損なわれてしまう。 自分が読めればいいだけならいくらでも横に伸ばせばいいけど。
712 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 14:42:11 ] >>708-711 stackoverflow.com/questions/110928/is-there-a-valid-reason-for-enforcing-a-maximum-width-of-80-characters-in-a-codhttp://stackoverflow.com/questions/110928/is-there-a-valid-reason-for-enforcing-a-maximum-width-of-80-characters-in-a-cod
713 名前:712 mailto:sage [2009/01/30(金) 14:42:57 ] ごめんミスった。 >>708-711 stackoverflow.com/questions/110928/is-there-a-valid-reason-for-enforcing-a-maximum-width-of-80-characters-in-a-cod
714 名前:デフォルトの名無しさん mailto:sage [2009/01/30(金) 17:10:00 ] エディタ横2列で見ることもあるから80桁は守ってる(厳密ではないが)
715 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 00:45:27 ] 自宅と会社のWindowsでは、xyzzyでバッファ2枚取ると丁度100カラム。 客先と会社のLinuxでは、端末エミュレータを3枚並べると丁度100、100、80カラム。 なので80-100で収まるようにコーディングしている。
716 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 07:39:44 ] teratermだろどうせ 無理すんな
717 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 10:06:10 ] 端末エミュレータと聞いて、teratermを連想する馬鹿発見。 まぁ、客先の現場に行くとサーバがSunだしLinux端末がないから使っているけどさw
718 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 14:53:56 ] 俺、Xでもだいたいターミナルエミュレータいくつか並べる使い方しかしないから、 最近はもっぱらWindowsからTeraTermでつないで使ってる。
719 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 17:25:33 ] 色づけ厨なのでputtyしか使わない
720 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 23:06:17 ] 仮想化おいしいです。
721 名前:デフォルトの名無しさん [2009/10/10(土) 03:00:50 ] ソースコードがMacで保存されているとかいうエラーが出るのだけど、どういうこと?
722 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 03:33:25 ] >>721 きっと、ソースコードがMacで保存されているんだと思う。
723 名前:デフォルトの名無しさん [2009/10/11(日) 22:31:03 ] LF
724 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 17:03:53 ] 今時そんなエラー吐くエディタは要らんな。
725 名前:デフォルトの名無しさん [2009/10/18(日) 18:12:05 ] for ( ; ; )/*~~~~ \(; ; )*/ 無限ループはこうかく
726 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 23:37:59 ] こうだろ #define _ for(;_;)
727 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 00:18:53 ] #define は反則だろ・・。 #define do_ob (for) #define p_q (;;) do_ob (p_q)
728 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 00:25:14 ] >727 展開すると (for)((;;)) コレが通るコンパイラを教えてクレ。
729 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 21:38:33 ] >>728 defineのあとのカッコ()は無視されます
730 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 00:48:44 ] >729 #define A (1+2) #define B (3+4) printf( "%d\n", A * B );
731 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 12:02:05 ] >>729 むしろ>>730 のようにカッコを無視してもらっては困る場合が多いんだけど
732 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 12:07:05 ] >>729 だから、どのコンパイラがそんな挙動をするのかと。
733 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 17:47:26 ] >>730 11
734 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 18:07:49 ] >>733 >732
735 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:16:03 ] 「コメントは無視される」と間違えてる気ガス。 #define A 1 // コメント書いてもちゃんと通るYO! printf( "%d\n", A );
736 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 02:42:12 ] 香ばしいな
737 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 09:36:17 ] >>735 >「コメントは無視される」と間違えてる気ガス。 誰が?
738 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 09:42:54 ] >>737 >735は日本語が不自由なんだよ。>735は、 「>729はコメントが無視されることと同様にと括弧も無視されると勘違いしているのじゃないか」 と言いたいのだろ。 まぁ、普通はそんな間の抜けた勘違いはしないがな。
739 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 19:34:08 ] 俺の書いた>>325 のせいで殺伐としてるなw
740 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 19:35:12 ] #define 325 735
741 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 19:35:56 ] 上記2つ725の間違いです><
742 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 20:18:01 ] スタイルの前にまともに動くコードを書けって感じ、、、
743 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 22:36:02 ] #define good ;;