什么时候应该在类的方法中显式地编写this->member?
发布于 2009-06-14 18:12:35
通常情况下,您不必这样做,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
}
};发布于 2009-06-14 18:10:39
如果在与现有成员同名的方法中声明局部变量,则必须使用this->var来访问类成员,而不是局部变量。
#include <iostream>
using namespace std;
class A
{
public:
int a;
void f() {
a = 4;
int a = 5;
cout << a << endl;
cout << this->a << endl;
}
};
int main()
{
A a;
a.f();
}打印:
5
4.
发布于 2009-06-14 23:29:26
虽然我通常并不特别喜欢它,但我已经看到其他人使用它->只是为了从intellisense获得帮助!
https://stackoverflow.com/questions/993352
复制相似问题