7
votes

Quelle est la signification des signaux de soulignement dans un constructeur C ++?

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? xxx


0 commentaires

8 Réponses :


1
votes

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.

Il n'y a pas de sens particulière - c'est juste une convention que certaines personnes peuvent utiliser.


0 commentaires

9
votes

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.

Un soulignement est un caractère valide dans les identificateurs C ++.


4 commentaires

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.



0
votes

Ils n'ont pas de sens syntaxique. Cependant, si vous avez un tas de champs (par exemple, x , y , largeur et hauteur ), 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.


0 commentaires

0
votes

Le but de ces traits de soulignement est de distinguer la variable de paramètre float _x et de la variable de membre flotteur x . 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 _ et préfixez toutes les variables de membre avec m _ lorsque je dois coder c ++.

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. xxx


0 commentaires

8
votes

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?



8
votes

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 xxx

bien qu'il puisse s'avérer être déroutant pour un lecteur non préparé.

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 -> ... 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.


3 commentaires

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 Syntax vous permet de mettre en place votre SETX et Sety 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).



0
votes

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.

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)


0 commentaires

2
votes

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: xxx

dans l'exemple ci-dessus:

  • _variable - signifie qu'il s'agit d'une variable de membre de classe
  • variable_ - signifie ceci est un paramètre à une fonction
  • variable - signifie qu'il s'agit simplement d'une variable régulière locale à la portée de la fonction

1 commentaires

et _variable TriablePasses sur l'espace de noms de la mise en œuvre.