Dans l'exemple que vous avez posté, il n'y a aucune différence entre les deux syntaxes. Elles sont totalement identiques.
Il y a deux cas où il y a une différence. Le premier est si vous avez une classe modèle qui hérite d'un type qui dépend d'un argument modèle. Par exemple :
template <typename T> class Base {
public:
void doSomething() const {
std::cout << "Do ALL the things!" << std::endl;
}
};
template <typename T> class Derived: public Base<T> {
public:
void doSomethingElse() const {
doSomething(); // Error!
this->doSomething(); // Okay
}
};
Ici, puisque Derived<T>
hérite du type Base<T>
qui dépend d'un argument de modèle, la recherche de nom se fait en deux étapes. Si vous appelez doSomething
en utilisant la syntaxe non qualifiée, alors le compilateur ne sait pas qu'il faut chercher dans Base<T>
pour le trouver et signalera une erreur. Cependant, si vous dites this->doSomething()
il sait que vous appelez une fonction membre et finira par comprendre qu'il est censé regarder dans le fichier Base<T>
.
L'autre cas se présente si vous avez un objet local déclaré à l'intérieur de la fonction dont le nom est le même que celui d'une fonction membre. Par exemple :
class ThisIsSillyDontDoThisLikeSeriouslyDont {
public:
void doSomething() const {
std::cout << "Do ALL the things!" << std::endl;
}
void weirdFunction() const {
auto doSomething = [] {
std::cout << "I'm afraid there's nothing to be done" << std::endl;
};
doSomething(); // Calls the local function
this->doSomething(); // Calls the member function
}
};
Ce deuxième cas est si rare que je ne l'ai jamais vu, et j'irais même jusqu'à dire que c'est vraiment un mauvais style de codage.
En dehors de ces rares cas, il n'y a pas de différence entre appeler une fonction membre sur vous-même avec et sans this->
comme préfixe.