可能性のある重複:
何がより理にかなっています-char * stringまたはchar * string?C++でのポインター宣言:アスタリスクの配置
私はこれの混合バージョンを多くのコードで見ました。 (これはCとC++に当てはまります。)人々は2つの方法のいずれかでポインターを宣言しているようで、どちらが正しいのか、それが重要かどうかはわかりません。
次のように、型名の隣にアスタリスクを配置する最初の方法:
someType* somePtr;
2番目の方法は、次のように、変数名の隣にアスタリスクを置くことです。
someType *somePtr;
これは今しばらく私を夢中にさせてきました。ポインターを宣言する標準的な方法はありますか?ポインターがどのように宣言されるかは重要ですか?以前に両方の宣言を使用したことがありますが、コンパイラーはどちらの宣言も気にしないことを知っています。しかし、ポインターが2つの異なる方法で宣言されているのを見たという事実は、その背後に理由があると信じるようになります。どちらかの方法が読みにくいか、何らかの形で欠けている論理的である場合、私は興味があります。
それは好みの問題であり、ブレースのスタイルのように、やや聖戦のようなものです。
スタイル
someType* somePtr;
ポインター変数の型を強調しています。基本的に、「somePtr
の型はsomeType
へのポインターです」と言っています。
スタイル
someType *somePtr
ポイント先データのタイプを強調しています。基本的に、「somePtr
が指すデータのタイプはsomeType
です」と言っています。
これらは両方とも同じことを意味しますが、ポインターを作成するときの特定のプログラマーのメンタルモデルが、いわば、ポイント先のデータまたはポインター変数に「焦点を合わせている」かどうかに依存します。
中央に置く(someType * somePtr
)いずれかへのコミットを回避しようとしています。
関係ありません。誰かが出てきて、だましとして質問を閉じ、他の誰かがint* a
が同じ宣言で複数の変数を宣言している場合、int *a
wayはコードの構文構造をよりよく反映しており、別の人はStroustrupがint* a
仕方。
多くの意見がありますが、ここには「正しい」方法はありません。
それは問題ではなく、個人的な好みです。
一部の人々は、型を一緒に保つことを好む:
int* p;
次の理由により、変数の隣に移動する必要があると言う人もいます。
int *p, x;//declare 1 int pointer and 1 int
int *p, *x;//declare 2 int pointers.
時間が経つにつれて、これを見落とし、両方のバリエーションを受け入れるようになります。
C++がCの上に強力な型システムを追加したため、違いが生じました。Cプログラマーは通常、「値」の観点から考えます。
int *pValue;
「pValueの逆参照はint」であるのに対し、C++プログラマーは「型」で考える
int* pValue;
「pValue型はintへのポインタです」と読みます。コンパイラは、もちろん違いを認識しません。ただし、C++でプログラミングするときに「値のセマンティクス」を主張するのはCプログラマーであることがわかります。
変数の名前の隣にアスタリスクを置く方が明確だと思います。
誤ってsomeType* one, two;
が両方ともポインターであると考えているが、変数one
のみがポインターであると宣言する場合があります。 two
は単なるsomeType
です。 someType *one, *two
として宣言すると、この問題を回避できます。