私の意見では、状況に応じて答えは両方です。一般的に、IMOでは、タイプではなくポインタ名の横にアスタリスクを置く方が適切です。例を比較:
int *pointer1, *pointer2; // Fully consistent, two pointers
int* pointer1, pointer2; // Inconsistent -- because only the first one is a pointer, the second one is an int variable
// The second case is unexpected, and thus prone to errors
2番目のケースに一貫性がないのはなぜですか?たとえばint x,y;
、同じ型の2つの変数を宣言しますが、型は宣言で一度しか言及されていません。これにより、前例と予想される動作が作成されます。そしてそれint* pointer1, pointer2;
はpointer1
ポインタとして宣言されているのでそれと矛盾していますが、pointer2
はが、整数変数です。明らかにエラーが発生しやすいため、回避する必要があります(タイプではなく、ポインター名の横にアスタリスクを付けることにより)。
ただし、いくつかの例外があります。たとえば、次のように、オブジェクト名の横にアスタリスクを配置できない場合(および配置場所が重要な場合)に、望ましくない結果が得られない場合があります。
MyClass *volatile MyObjName
void test (const char *const p) // const value pointed to by a const pointer
最後に、場合によっては、型名の横にアスタリスクを置く方が間違いなく明確かもしれません。例:
void* ClassName::getItemPtr () {return &item;} // Clear at first sight