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
ことを に伝えるには、任意の に対してプレフィックスが必要です。i
A<T>
T
this->
注: 次のようにしてプレフィックスを省略することも可能です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
}
};