`this` ポインターを明示的に使用する必要があるのはいつですか? 質問する

`this` ポインターを明示的に使用する必要があるのはいつですか? 質問する

this->memberクラスのメソッドを明示的に記述する必要があるのはいつですか?

ベストアンサー1

通常は、そうする必要はないことthis->が暗示されています。

場合によっては、名前の曖昧さがあり、クラス メンバーとローカル変数の曖昧さを解消するために使用できます。ただし、ここでは、 がthis->明示的に必要なまったく異なるケースがあります。

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

template<class T>
struct A {
   T i;
};

template<class T>
struct B : A<T> {
    T foo() {
        return this->i; //standard accepted by all compilers 
        //return i; //clang and gcc will fail
        //clang 13.1.6: use of undeclared identifier 'i'
        //gcc 11.3.0: 'i' was not declared in this scope
        //Microsoft C++ Compiler 2019 will accept it
    }

};

int main() {
    B<int> b;
    b.foo();
}

を省略するとthis->、コンパイラによっては の扱い方がわからない場合があります。が のメンバーであるiことを に伝えるには、任意の に対してプレフィックスが必要です。iA<T>Tthis->

注: 次のようにしてプレフィックスを省略することも可能ですthis->

template<class T>
struct B : A<T> {
    int foo() {
        return A<T>::i; // explicitly refer to a variable in the base class 
        //where 'i' is now known to exist
    }

};

おすすめ記事