membre" plus rapide / plus lent que l'appel implicite à "membre" - Retrouvez les réponses et les commentaires concernant cette question" />
Après une recherche sur notre ami Google, je n'ai pas pu obtenir une vue claire sur le point suivant. P>
Je suis utilisé pour appeler des membres de la classe avec Comme je travaille sur un algorithme supposé optimisé, je me demandais si l'utilisation de Est-ce? P> ceci -> code>. Même si ce n'est pas nécessaire, je le trouve plus explicite car il aide à maintenir un algorithme lourde avec des charges de vars. P>
ceci -> code> modifierait les performances d'exécution ou non. P>
4 Réponses :
Non, l'appel est exactement le même dans les deux cas. P>
Cela ne fait aucune différence. Voici une démonstration avec GCC. La source est une classe simple, mais j'ai limité ce post à la différence de clarté.
% diff -s with-this.cpp without-this.cpp 7c7 < this->x = 5; --- > x = 5; % g++ -c with-this.cpp without-this.cpp % diff -s with-this.o without-this.o Files with-this.o and without-this.o are identical
Je faisais le même test avec g ++. :) ça marche la même chose. Tout identique.
@Moustik: Il y a votre réponse, alors :-)
Réponse a été donnée par Zennehoy et voici le code de montage (généré par Microsoft C ++ Compiler) pour une classe de test simple: La fenêtre de démontage dans Visual Studio montre que le code de montage est le même pour Les deux fonctions: p> et le code dans la principale: p> microsoft compilateur utilise __ thiscall code > Convention appelante Par défaut pour les appels de membre de la classe et
Ce pointeur code> est passé via un registre ECX. p> p>
Il y a plusieurs couches impliquées dans la compilation d'une langue. p>
La différence entre accéder à Plus précisément, c'est une question de recherche de nom et comment l'avant du compilateur "trouver" "trouver" l'élément exact que vous parlez. Par conséquent, vous pourriez accélérer la compilation en étant plus précis ... bien qu'il soit imperceptible (il y a beaucoup plus de tâches de consommation de temps en C ++, comme l'ouverture de toutes ces inclut). P>
Depuis (dans ce cas), vous vous référez au même élément, il devrait em> peu importe. P>
Maintenant, un parallèle intéressant peut être fait avec des langues interprétées. Dans une langue interprétée, la recherche de nom sera retardée au moment où la ligne (ou la fonction) est appelée. Par conséquent, cela pourrait avoir un impact au moment de l'exécution (mais encore une fois, probablement pas vraiment perceptible). P> membre code> comme membre
, code>,
this-> membre code>,
myClass :: membre code> etc. .. est une différence syntaxique. P>
Juste un indice: vous pouvez vérifier l'assemblage généré pour voir cela;)