ポインタ宣言の*記号、左寄せ派? 右寄せ派?

@mutotaiju それだと筋が通らない場合がありますよね。僕はC以来伝統のルール「宣言の文法は使用と同じ」を適用して、演算子の優先順位から見て自然な書き方を採用します。でここがポイントなんですが、int *a;を、「intポインタ型のa」とは読みません。(続く)
2011-09-07 22:55:49
@mutotaiju そうではなく、int *a;は「*演算子を適用するとintの値が出てくるのがa」と読みます。つまり使用する時にどうなるか、って事を基準に考えます。こう考えると、*は名前(というよりは、*の適用先)に寄せるのが合理的で、いつでも筋が通ります。
2011-09-07 22:59:14
@hagat そういう説は初めて聞きました。しかし、int *は、typedefの対象になるし、templateのパラメータにもなるので、やはり実質的には型なのでは?
2011-09-07 23:05:54
@mutotaiju Cでは宣言と使用の文法を一致させる、という話は聞いた事ありませんか? 長々と書きましたが、ぶっちゃけそれさえ覚えてれば、いつでも一貫した書き方、解釈ができるし、複雑な宣言も簡単に読み解けるし書けるのですが。
2011-09-07 23:16:57
@mutotaiju あ、でもちろんポインタも含めて型ではありますよ。で、「『型』を書く時は、宣言から識別子を除く」と覚えます。そうすると、配列へのポインタを表す型「int (*)[10]」などに出てくる謎の'( )'もすんなり解釈できるのではないでしょうか。
2011-09-07 23:19:12
@hagat 「Cでは宣言と使用の文法を一致させる」は参照には適用できないなと。参照はまた別、というのであればそれはそれでいいですが…。
2011-09-08 00:15:28
@mutotaiju あ、そうか「使用時」の話ですね!w それは確かにそうなんですが、使用時に&付けると煩いですしね。そこは特別ルールっていうか、さっきのルールはCの基本なので、C++ではまぁ例外も色々ありますね。
2011-09-08 00:18:56