В большинстве случаев нет никакой разницы. Но есть ситуации, когда это имеет значение:
class foo
{
int i;
void bar() {
int i = 3;
i; // refers to local i
this->i; // refers to the member i
}
};
Кроме того, для шаблонов вам может понадобиться квалифицировать участника с this->
, чтобы поиск имени задерживался:
template<typename T>
struct A
{
int i;
T* p;
};
template<typename T>
struct B : A<T>
{
void foo() {
int k = this->i; // here this-> is required
}
};
Компилятор, который правильно выполняет "двухфазный поиск", будет жаловаться, если вы удалите "this->", что он не знает, кем я должен быть. «this->» говорит, что это член базового класса. Поскольку базовый класс зависит от параметра шаблона, поиск задерживается до создания экземпляра шаблона класса.