Maison >développement back-end >C++ >Pourquoi `const T *obj` et `T const *obj` sont-ils tous deux valides en C et quand dois-je les utiliser chacun ?
Const Data : deux chemins déclarés
En C , vous pouvez rendre les données ou le pointeur d'un objet non modifiables à l'aide de const. La syntaxe traditionnelle pour cela est :
const T *obj; // Pointer to const data T const *obj; // Equivalent to const T*
Cependant, vous avez peut-être remarqué une syntaxe alternative :
Object const *obj;
Cela soulève la question : pourquoi les deux syntaxes sont-elles valides et quand devez-vous utiliser l'un sur l'autre ?
La naissance des données Const
Le positionnement de const dans les déclarations de type remonte aux débuts du C. La grammaire du langage définie par Kernighan et Ritchie permettait de déclarer les données const comme :
const T *obj;
Essentiellement, le compilateur C analysait les jetons de gauche à droite, appliquer const à la spécification de type appropriée en fonction de la position du jeton.
Le qualificatif Const Application
La position de const dans les déclarations de type n'affecte pas le résultat car const s'applique toujours à la déclaration à sa gauche. Dans le cas des pointeurs :
Équivalence sémantique
La raison sous-jacente de cette équivalence est que la signification sémantique de la déclaration reste la même quelle que soit la position de const. Que vous utilisiez const T *obj ou T const *obj, vous protégez les données pointées par obj contre toute modification.
Pointeurs de fonction : un cas similaire
Un cas similaire Une situation se présente lors de la déclaration de pointeurs de fonction :
void * function1(void); // Function returning void * void (* function2)(void); // Function pointer to a function returning void
Encore une fois, l'analyse de gauche à droite de la syntaxe du langage permet ces alternatives déclarations.
Préférences et cas d'utilisation
En fin de compte, la préférence pour une syntaxe par rapport à une autre est subjective. Cependant, il est généralement recommandé d'utiliser :
Quelle que soit votre préférence, les deux syntaxes sont valides et la sémantique reste cohérente.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!