ほとんどの場合、違いはありません。ただし、違いが生じる状況があります。
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
}
};
「2 フェーズ ルックアップ」を適切に実行するコンパイラは、「this->」を削除すると、私が何をすべきかわからないと文句を言うでしょう。「this->」は、それが基本クラスのメンバーであることを示します。基本クラスはテンプレート パラメータに依存するため、クラス テンプレートがインスタンス化されるまでルックアップは遅延します。