Je me demande quelque chose en C ++.
admettre le code suivant: p> à l'intérieur de ma classe, y a-t-il une différence entre this-> bar code> et
foo :: bar code>? Y a-t-il des cas où l'on est invalide? P> p>
4 Réponses :
Pour ce que j'ai appris avec C / C ++, utiliser le -> sur quelque chose est principalement destiné à un objet de pointeur, et utilisant :: est utilisé pour les classes qui font partie d'un espace de noms ou d'une super classe qui est le général classe de tout ce que vous incluez p>
Eh bien, pour le :: C'est comme utiliser STD :: Cout << ""; Utilisation :: signifie que vous utilisez la mise en œuvre directe de l'espace de noms STD au lieu de dire à l'aide de Namespace Std; dans votre dossier. Le -> est comme si vous êtes "pointant" un pointeur sur un autre objet. C'est comme ça que je les ai vus utilisés.
CLASSE INTÉRIEUR FOO CODE> (SPÉCIFICIQUEMENT) Il n'y a pas de différence entre les deux étant donné que
bar code> n'est pas
statique code>.
FOO :: BAR CODE> est appelé le nom total qualifié de la barre
code>, et ce formulaire est utile dans des scénarios où il peut y avoir plusieurs types dans la hiérarchie définissant un membre du même nom. Par exemple, vous auriez besoin em> écrire
foo :: bar code> ici: p>
Ils font la même chose membres. p>
Cependant, vous pourrez utiliser ceci -> code> pour distinguer les membres du même nom dans la hiérarchie de la classe. Vous devrez utiliser la version
classname :: code> pour le faire. P>
GCC n'est pas d'accord que ceci -> code> ne fonctionne pas avec des variables statiques: Ideone.com/n4dsdd4/ a>
@Xymostech je suis déconcerté. clang code> l'accepte également. Merci de le pointer.
Aucun problème. Je suis un peu confasqué aussi.
Il vous permet également de faire référence à une variable d'une autre classe (classe de base dans la plupart des cas) avec le même nom. Pour moi, il est évident de cet exemple, espérons que cela vous aidera.
struct { Base::bar = 1; Derived::bar = 2; // The same as using bar }
Bien sûr, si
bar code> est une fonction virtuelle au lieu d'un membre de données, il y a une différence entre les deux. Notez également que vous pouvez les combiner comme
this-> foo :: bar code>.