static const contre const statique
Je ne comprends pas la différence entre ces deux états dans ma classe C++:
class MyClass {
public:
private:
const static int var = 0; //Option 1
static const int var = 0; //Option 2
};
Quelle est la différence b/w l'Option 1 et l'Option 2?? Ils ont tous les deux de la compilation.
- Peut-être que la lecture de ce lien pourrait vous aider à comprendre les déclarations de mieux.
- J'ai, entre autres, de ne pas assez confiance à la spirale de la règle. Une dans ce cas particulier, il ne va pas aider du tout comme en spirale ou non la séquence diffère seulement dans l'ordre de
const
etstatic
- Je suis d'accord. Sur le seul temps de la spirale de la règle fonctionne, c'est quand les déclarations sont tellement simple que vous n'avez pas besoin de toute façon. Sinon, c'est trompeuse, et complètement faux, au pire.
Vous devez vous connecter pour publier un commentaire.
Ils signifient exactement la même chose. Vous êtes libre de choisir celle que vous pensez est plus facile à lire.
En C, vous devrait place
static
au début, mais ce n'est pas encore obligatoire. Je ne suis pas sûr si C++ suivi C à cet égard.static
,const
(ici, de toute façon) et le type (par exemple,int
) sont tous de la partiede la déclaration spécificateur. Historiquement, la déclaration spécificateur
est une liste non ordonnée de mots clés et les noms de type, de sorte que:
étaient légales, et tous voulaient dire la même chose.
Je pense que c'est encore le cas, à la fois en C et en C++, mais si je suis
ne me trompe pas, C est déconseillé de mettre le spécificateur de classe de stockage
(
static
) n'importe où, mais au début. C'est en tout cas unquasi universelle de la convention, de sorte que vous devrait normalement mettre le
static
(et
extern
, etc.) au début.Remarque aussi que le fait d'être non-ordonnée s'applique uniquement à la déclaration spécificateur.
Dans le declarators qui suivent, le cv-qualificatif(s) doit suivre
ce qu'ils ont de se qualifier, pour des raisons d'orthogonalité, vous devriez normalement
toujours mettre le cv-qualificatifs, après ce qu'ils ont de le modifier (c'est à dire
int const
,et pas
const int
).Enfin, il semble être une généralisation de la convention de présenter le type de
modificateurs avant que le type, avec le ce paramètre modificateur (
signed
ouunsigned
) précédant le modificateur de longueur (short
,long
oulong
). Il est aussi assez fréquent de tomber lelong
int
si un modificateur estprésent, afin que les gens écrivent
unsigned
, plutôt que deunsigned int
, etlong
, plutôt que delong int
. C'est loin d'être universel, cependant.Compte tenu de cela, le premier moyen de la déclaration écrite ci-dessus est
préféré, mais il est tout à fait acceptable de la
int
.int
à la déclaration d'origine. Sans au moins un nom de type, la déclaration serait illégal. Mais avec leint
, il devrait être "soit" ou "les deux", et non "ni".int
si il y a un modificateur de longueur, mais pas si il est seulement à ce paramètre modificateur. I. e., presque tout le code, je vois utiliseunsigned int
au lieu deunsigned
.unsigned int
&unsigned
selon le contexte. Si je suis la déclaration d'une variable de membre, je vais utiliserunsigned int
, si je suis la déclarer comme un compteur pour une matrice ou un vecteur d'indexation dans les boucles, puis je vais utilisent généralementunsigned
. Comme pourstatic
je l'utilise généralement avant quoi que ce soit. La seule chose que je suis en désaccord avec ce qui précède est que je n'aime pas leconst
après; sa préférence personnelle. Quand j'ai lu et voir mon codestatic const unsigned int
je sais qu'il a du stockage statique, il estconstant
& ununsigned int
. De l'autre il se lit à l'envers pour moi.Ils sont les mêmes. Mais je serais toujours aller pour l'option 2, pour la simple raison que les mots-clés
const
etint
mieux juxtaposés, car ils définissent le type de données. Où que le mot-cléstatic
définit l'accessibilité de cette variable.Ils sont les mêmes.
Voir cette discussion: http://bytes.com/topic/c/answers/140177-const-static-vs-static-const