ポインタ型宣言時の書き方について
この前どこかでポインタ型宣言の書き方が
int* a;//C++な人 int *b;//Cな人
になってること多いよね。みたいなエントリを見たのでちょっとこれについて。
(たぶんRSSリーダーかtwitterのリンクから飛んだんだけど消息不明に。知ってる人いたらアドレス教えて)
まず、ポインタ型の宣言の仕方について、ちょっと前までは自分も
int* a;
みたいな感じに書いてました。
根拠としては単純に「int*型のaを宣言する」って見方ができるのでいいなってことだったんだけど、
この理解の仕方には微妙に問題があったり。
というのも、例えば下のようなコードを書いたときに
class Test { }; int main() { Test* pa,pb; pa = new Test; pb = new Test;//pbはTest*型ではなくTest型なのでコンパイルエラー return 0; }
みたいな事が起きる。
この程度のものならすぐに発見できるのでいいんですが、
テンプレートとかを使ったコードを書いているときにこの手のものに遭遇すると
変な特殊化が行われたりと割とひどい目にあったりします。
なので最近は、
「int*型の変数aを宣言する」ではなく
「*aするとint型になるポインタaを宣言する」
っていう理解で変数側に*を付ける派に転向したり。
まあこの辺は個人の趣味もあるのでなんとも言えないですが。