2012-11-27 5 views
3

En C++, est-ce que cette forme int *p est sémantiquement différente de celle-ci int* p? Ou est-ce clairement une question de style?Différence sémantique entre différentes syntaxes de pointeur en C++?

Maintenant, cette question peut être stupide, mais je me souviens que je l'avais vu quelque part les deux styles utilisées en même temps, quelque chose qui m'a amené à croire qu'il peut y avoir une sémantique différente entre ces formes.

+0

'int 'p'' int * p' 'int * p'' int * p' - tous valides tous sémantiquement identiques –

+1

Notez que bjarne répond à cette question dans [sa faq] (http://www.stroustrup.com /bs_faq2.html#whitespace). –

+0

@JesseGood Oh merci pour ce lien! J'ai cherché sur le web avant de le demander, et je ne sais pas comment j'ai raté ça! – NlightNFotis

Répondre

6

Ils sont identiques.

C'est parfois difficile, puisque

int* a, b; 

définit un pointeur et un int. Ce style le rend plus clair:

int *a, b; 
4

Il a la même signification sémantique. Si vous utilisez const mot-clé être au courant des mises en garde:

int * conts p; - pointeur const int * par rapport

int const * p; - pointeur non const const int.

2

Comme d'autres l'ont dit, ils sont identiques. Le fait que int* a, b; déclare un pointeur et un entier est un aspect d'une verrue qui se manifeste également d'autres façons. Par exemple .:

int* a, f(double), c[42]; 

déclare un pointeur vers int appelé a, une fonction qui prend une double et renvoie un int appelé f, et un réseau de 42 int s appelé c. C'est parce que toutes ces "décorations" (*, (), []) font partie de la grammaire C++ appelée le déclarateur, qui est associé à un nom individuel, plutôt que de l'ensemble de l'instruction (ce qui est appelé une déclaration dans la grammaire).

Questions connexes