Quand dois-je écrire explicitement `` dans une méthode de une classe?
Réponses
Trop de publicités?Généralement, vous n'avez pas à, this->
est implicite.
Parfois, il y a un nom d'ambiguïté, où il peut être utilisé pour distinguer les membres de la classe et les variables locales. Cependant, ici, c'est une autre affaire où l' this->
est explicitement requis.
Considérons le code suivant:
template<class T>
struct A {
int i;
};
template<class T>
struct B : A<T> {
int foo() {
return this->i;
}
};
int main() {
B<int> b;
b.foo();
}
Si vous omettez this->
, le compilateur ne sait pas comment traiter l' i
, car il peut ou peut ne pas exister dans tous les instanciations de A
. Afin de lui indiquer qu' i
est en effet un membre de l' A<T>
, pour n'importe quel T
, l' this->
préfixe est nécessaire.
Remarque: il est possible de toujours omettre this->
préfixe à l'aide de:
template<class T>
struct B : A<T> {
using A<T>::i; // explicitly refer to a variable in the base class
int foo() {
return i; // i is now known to exist
}
};
Il y a plusieurs raisons pour lesquelles vous pourriez avoir besoin d'utiliser this
pointeur explicitement.
- Lorsque vous souhaitez passer d'une référence à votre objet à une fonction.
- Quand il y a un déclarés localement objet avec le même nom que l'objet membre.
- Lorsque vous essayez d'accéder aux membres de l' dépendante des classes de base.
- Certaines personnes préfèrent la notation visuelle de lever l'ambiguïté membre accède dans leur code.