OK Je ne suis pas un programmeur C ++ très expérimenté, mais je me demandais quelle est la signification des souligneurs dans les arguments du constructeur suivant?
8 Réponses :
Ce ne sont que des noms des paramètres passés. Ils arrivent à correspondre aux variables des membres et sont utilisées pour les initialisateurs. P>
Il n'y a pas de sens particulière - c'est juste une convention que certaines personnes peuvent utiliser. p>
rien de spécial. Il vient de le nommer comme ça de la distinction entre les variables de membre et les noms de paramètres. P>
Un soulignement est un caractère valide dans les identificateurs C ++. P>
De plus, normalement, les variables des membres ont des soulignements par convention et les arguments du constructeur ne le font pas. C'est tout à fait à la convention de codage locale. Certains magasins ont besoin de "M_" devant les membres. Restez à l'écart des doubles traits de soulignement (réservé à l'utilisation du compilateur). Voir: J'ai vu assez de code pour dire que rien dans les noms des membres privés, beaucoup moins de soulignement, sont conventionnels.
Notez également que cette distinction n'est pas strictement nécessaire dans une initialiseur CTOR - la recherche des membres ne trouve que des membres et la recherche de nom à l'intérieur de l'initialiszer trouvera le nom du paramètre d'abord.
Comme je l'ai dit, des conventions locales: Google-styleguide.googlecode.com/svn / coffre / ... Devinez @CoppPro signifiait en général. Ce qui est juste.
Ils n'ont pas de sens syntaxique. Cependant, si vous avez un tas de champs (par exemple, x code>,
y code>,
largeur code> et
hauteur code>), il est Une convention commune pour nommer les paramètres du constructeur qui les initialisent avec le nom de champ plus un soulignement de premier plan. P>
Le but de ces traits de soulignement est de distinguer la variable de paramètre donc quand je suis dans une situation où Je dois mélanger et faire correspondre les variables locales, membres et paramètres, je sais lesquels je m'occupe de ce que je traite. P> float _x code> et de la variable de membre
flotteur x code>. Syntaxiquement, il n'y a aucune signification spéciale ajoutée en raison des souligneurs. Personnellement préférez-je préfixer tous les paramètres avec
A _ code> et préfixez toutes les variables de membre avec
m _ code> lorsque je dois coder c ++.
C'est juste une convention de dénomination pratique, cela ne signifie rien dans la langue. Assurez-vous simplement de ne pas le suivre avec une lettre majuscule: Qu'est-ce que le double soulignement (__cracst) signifie dans C? p>
Voir aussi: Stackoverflow.com/Questtions/228783/...
Très probablement, l'auteur du code essayait d'éviter le conflit potentiel entre les noms de données de données et les noms de paramètres du constructeur dans la liste d'initialistes. Très probable, l'auteur n'a pas été au courant du fait que les règles de recherche C ++ s'assurent que le conflit ne se produira de toute façon pas. C'est à dire. Le code suivant produira également des résultats attendus bien qu'il puisse s'avérer être déroutant pour un lecteur non préparé. P> Bien sûr, à l'intérieur du corps du constructeur, noms de paramètres Cachera les noms des membres, ce qui permettra d'utiliser ceci -> ... code> ou des noms qualifiés pour accéder aux membres de données. Les chances sont l'auteur du code essayait d'éviter cela aussi. P> p>
Intéressant, ne connaissait pas cette fridine. Cependant, dans mon esprit, il serait toujours préférable d'utiliser des noms de paramètres qui ne correspondent pas aux noms de variable membre. Dans ce cas, vous pouvez utiliser X et Y comme paramètres dans la CTOR, mais vous devez écrire des méthodes SETX et SETY, vous devez utiliser différents noms de paramètres. Je préfère garder mes noms de paramètres cohérents dans une classe.
@THissuiSblackNot: Pas nécessairement. Le this-> membre code> Syntax vous permet de mettre en place votre
SETX code> et
Sety code> Même si les noms de paramètres masquent les noms de membres. Certaines normes de codage exigent réellement que les membres de la classe soient toujours accessibles via la syntaxe
Ceci-> Membre> (il y a une certaine valeur dans celle-ci, je dois admettre).
@Andreyt: Vous faites un bon point. Si elle est utilisée de manière cohérente, la syntaxe des membres de cette entreprise est très claire (j'ai vu ce format dans de nombreuses classes Java). Cependant, que se passe-t-il lorsque vous oubliez la partie "this->"? Je ne suis pas sûr de ce que le comportement est, mais j'imagine que cela se produit fréquemment sur de grands projets. Même si rien d'effrayant se passe, l'incohérence du code me dérangerait (je choisis une nuit ici).
Parce que si vous numez Den Float X, float Y, etc. Vous n'avez pas pu accéder aux champs réels de la classe car ils ont le même nom. P>
Cela n'a rien à voir avec la langue, c'est juste une convention par le programmeur actuel (pour rendre le code plus évident, je pense) p>
Ce ne sont que des congrès de nommage variable que différentes personnes / institutions supposent. Cela peut sembler inutile à première vue mais est en fait très utile lors de la lecture et de la rédaction de code, en particulier lorsque vous avez des paramètres et des variables de membre qui ont le même nom. Par exemple. Vous pouvez couramment ces trois cas: dans l'exemple ci-dessus: p>
et _variable TriablePasses sur l'espace de noms de la mise en œuvre.