Argument correspondant et pointeur this
Les fonctions membres de classe sont gérées différemment selon qu'elles sont déclarées ou non comme static. Comme les fonctions non statiques possèdent un argument implicite qui fournit le pointeur this, elles sont considérées comme ayant un argument de plus que les fonctions statiques. Sinon, elles sont déclarées de façon identique.
Ces fonctions membres non statiques exigent que le pointeur this implicite corresponde au type d'objet via lequel la fonction est appelée ou, pour les opérateurs surchargés, elles exigent que le premier argument corresponde à l'objet auquel l'opérateur est appliqué. (Pour plus d'informations sur les opérateurs surchargés, consultez Opérateurs surchargés.)
Contrairement aux autres arguments dans les fonctions surchargées, aucun objet temporaire n'est introduit et aucune conversion n'est tentée en essayant de trouver une correspondance à l'argument de pointeur this.
Lorsque l'opérateur de sélection de membres – > est utilisé pour accéder à une fonction membre, l'argument de pointeur this a un type de class-name * const. Si les membres sont déclarés comme const ou volatile, les types sont const class-name* const et volatile class-name * const, respectivement.
L'opérateur de sélection de membres . fonctionne exactement de la même façon, sauf qu'un opérateur (d'adresse) & implicite est préfixé au nom de l'objet. L'exemple suivant illustre cela :
// Expression encountered in code
obj.name
// How the compiler treats it
(&obj)->name
L'opérande gauche des opérateurs (pointeur vers membre) –>* et .* est traité de la même façon que les opérateurs (sélection de membres) . et –> en ce qui concerne la correspondance d'arguments.