Dois-je utiliser " il " au sein d'une classe?
À l'intérieur d'une fonction membre d'une classe en C++, cela fait-il une différence, si j'utilise this->dataMember
ou tout simplement dataMember
? Ce qui est considéré comme meilleur style? Est-il une différence de performance?
(Je ne parle pas du cas où une variable locale a le même nom que le membre de données, dans ce cas, vous devez, à ma connaissance, l'utilisation this->
de les distinguer.)
OriginalL'auteur Ben | 2012-03-06
Vous devez vous connecter pour publier un commentaire.
En règle générale, c'est une question de conventions locales. La plupart des
les endroits que j'ai vu ne pas utiliser
this->
sauf en cas de nécessité, et c'estla convention que je préfère, mais j'ai entendu parler de gens qui préfèrent
l'utiliser systématiquement.
Il y a deux cas où il est nécessaire. La première est que si vous avez caché
le nom avec le même nom dans les locaux de la portée; si par exemple vous avez un membre
nommé
toto
, et que vous avez nommé votre argument de fonctiontoto
. De nombreuxconventions de codage marquer le membre ou argments pour éviter cela
cas, par exemple, tous les noms des membres de démarrer avec
my
oum_
, ou un nom de paramètreva commencer avec
the
.Les autres cas, c'est que
this->
peut être utilisé dans un modèle à se faire un nomdépendante. Ce n'est pertinente que si un modèle de classe hérite d'une
type de charge, et que vous voulez accéder à un membre de la base, par exemple:
Sans
this->
ici,g()
serait un non-dépendant de la nom, et lacompilateur de recherche dans le contexte de la définition de modèle,
sans prendre la classe de base en considération.
OriginalL'auteur James Kanze
C'est une affaire de style. Certaines personnes comme les extra
this->
pour le rendre plus évident que vous accédez à un membre de la classe. Mais si vous sentez que c'est assez évident, sans elle, il n'y aura pas de différence dans le code généré ou de la performance.(D'ailleurs le cas que vous avez mentionné avec chevauchement des étendues,
this->
peut aussi être obligatoire dans un modèle lors de la tentative de nommer un membre d'un type dépendant de la classe de base.)OriginalL'auteur aschepler
c'est tout simplement redondants à utiliser
this->
à l'appel des membres, sauf si vous voulez sémantiquement distinguer entre les habitants et les membres rapidement.beaucoup de gens utilisent le
m_
préfixe pour les membres de la classe, pour éviter d'écrirethis->
tout le temps.OriginalL'auteur Not_a_Golfer
J'ai toujours utiliser
this
lors de l'appel de membre fonctions.self
est obligatoire, il n'est donc pas un véritable fardeau pour moi.Mais pour les membres de données je ne l'utilise que lorsque cela est nécessaire car il n'est pas ADL. Pour répondre à vos questions:
Oui, si c'est à l'intérieur d'une classe de modèle. Puis
dataMember
est considéré comme un non-dépendants de nom, ce qui peut conduire à des différences sémantiques. Par exemple:Je ne pense pas qu'il y est une opinion très forte au sein de la communauté à ce sujet. Utilisez soit le style, mais cohérente.
Je suis assez sûr il n'y en a pas.
OriginalL'auteur Philipp
à utiliser lorsque vous avez caché/privé =) en tout autre cas, elle ne fera pas la différence =)
de IBM centre d'information-moi de citer les suivantes
OriginalL'auteur Sebastian Flückiger
à l'aide de "this->" est mieux (vous êtes sûr que c'est les membres), mais il ne veut pas faire une différence
OriginalL'auteur Pben
Si une fonction de modèle effectue un appel à une fonction membre, telles que l'appel ne dépend pas des paramètres du modèle,
this->
peut être utilisé pour aider le compilateur comme une alternative àMyUtopicClass<int, double, double>::vin()
.vin
est une fonction virtuelle, puisthis->vin()
etMyUtopicClass<int, double, double>::vin()
sont différents.OriginalL'auteur perreal