1. ホーム
  2. c++

[解決済み] ポインタ `this` はいつ明示的に使用する必要がありますか?

2022-10-08 16:21:01

質問

どのような場合に、明示的に this->member を明示的に記述する必要があります。 と書くべきでしょうか?

どのように解決するのですか?

通常、その必要はありません。 this-> が暗示されます。

名前があいまいな場合、クラスのメンバやローカル変数の曖昧さをなくすために使われることがあります。しかし、ここでは全く異なるケースで this-> が明示的に必要な場合です。

次のようなコードを考えてみましょう。

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();
}

を省略した場合 this-> を省略した場合、コンパイラは i の全てのインスタンスに存在するかしないか分からないので、 コンパイラはこれをどのように扱うか分かりません。 A . ということを伝えるために i のメンバーであることを伝えるために A<T> のメンバーであり、任意の T は、その this-> の接頭辞が必要です。

注意: この場合でも this-> を使うことでプレフィックスを省略することができます。

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
    }

};