Declarando pointers; asterisco à esquerda ou à direita do espaço entre o tipo e o nome?

Duplicatas possíveis:
O que faz mais sentido – char * string ou char * string? Declarações de ponteiro em C ++: posicionamento do asterisco

Eu vi versões mistas disso em muitos códigos. (A propósito, isso se aplica a C e C ++.) As pessoas parecem declarar pointers de duas maneiras, e eu não tenho idéia de qual delas é correta, se é que isso importa.

A primeira maneira é colocar o asterisco ao lado do nome do tipo, assim:

someType* somePtr; 

A segunda maneira é colocar o asterisco ao lado do nome da variável, assim:

 someType *somePtr; 

Isso tem me deixado louco por algum tempo agora. Existe alguma maneira padrão de declarar pointers? Será que importa como os pointers são declarados? Eu usei ambas as declarações antes, e sei que o compilador não se importa com o que é. No entanto, o fato de ter visto pointers declarados de duas maneiras diferentes me leva a acreditar que há uma razão por trás disso. Estou curioso para saber se algum dos methods é mais legível ou lógico de alguma forma que estou perdendo.

É uma questão de preferência e um pouco de guerra santa, assim como o estilo de cinta.

O estilo

 someType* somePtr; 

está enfatizando o tipo da variável do ponteiro. Está dizendo, essencialmente, “o tipo de somePtr é pointer-to- someType “.

O estilo

 someType *somePtr 

está enfatizando o tipo dos dados apontados. Está dizendo, essencialmente, “o tipo de dado apontado por somePtr é someType “.

Ambos significam a mesma coisa, mas depende se o modelo mental de um determinado programador ao criar um ponteiro é “focalizado”, por assim dizer, nos dados apontados ou na variável do ponteiro.

Colocá-lo no meio (como someType * somePtr ) está tentando evitar se comprometer com qualquer um.

Não importa. Alguém virá agora e encerrará a questão como um dupe, e outra pessoa mostrará como o int* a caminho se rompe se você declarar múltiplas variables ​​nas mesmas declarações enquanto o int *a maneira reflete melhor a estrutura sintática do código, e outro cara mostrará que a Stroustrup prefere o int* a way.

Muitas opiniões, mas nenhuma maneira “certa” aqui.

Não importa, é uma preferência pessoal.

Algumas pessoas gostam de manter o tipo em conjunto:

 int* p; 

Outras pessoas dizem que deve ir ao lado da variável devido ao seguinte:

 int *p, x;//declare 1 int pointer and 1 int int *p, *x;//declare 2 int pointers. 

Com o tempo, você simplesmente ignorará isso e aceitará as duas variações.

A diferença surgiu porque o C ++ adicionou um sistema de tipos mais forte em cima do C. O programador AC geralmente pensa em termos de “valores”,

 int *pValue; 

lê “a desreferencia do pValue é um int” enquanto que um programador C ++ pensa em “tipos” assim

 int* pValue; 

lê “o tipo pValue é ponteiro para int” O compilador não vê nenhuma diferença em todos os cursos. No entanto, você descobrirá que é o programador C que insiste em “semântica de valor” ao programar em C ++.

Eu acho que colocar o asterisco ao lado do nome da variável é mais claro.

Você pode erroneamente declarar someType* one, two; pensando que ambos são pointers, mas apenas a variável é um ponteiro; two é apenas um someType . Declarando como someType *one, *two evita esse problema.

Todo jeito que eu vi é

 TheType *myPointer 

porque você está declarando um POINTER do tipo TheType. Declaração semelhante

 TheType myVar 

seria declarar uma variável de instância do tipo TheType.

Além disso, você pode claramente fazer isso e tê-lo facilmente legível

 TheType myVar, *myPointer;