这有什么区别:
int MyClass::getId() {
return this->id;
}
和此:
int MyClass::getId() {
return id;
}
在C ++中?
答案 0 :(得分:2)
第一个示例限制了名称“id”被查找到MyClass类成员的范围。
第二个例子没有。
如果,例如MyClass没有成员“id”,或者当前方法有一个具有相同名称的局部变量或参数。
答案 1 :(得分:1)
这取决于具体情况。例子:
template <typename> struct X { int a; };
int b;
template <typename T> struct Foo : X<T> {
int f() {
return this->a; // OK
// return a; // Error
}
int g() {
// return this->b; // Error
return b; // OK
}
};
答案 2 :(得分:0)
假设您的类有一个名为id
的成员变量,则没有区别。即使您有一个全局id
变量,成员变量也始终优先。
你的下一个问题是:
那么为什么存在this
关键字?
在某些情况下你绝对需要它。
一个例子是你想要一个函数将指针/引用(*)返回给对象本身:
return *this; //reference
return this; //pointer
其他是你想把它作为参数传递给函数
some_function(*this); //reference(&) or value, depends on some_function signature
some_function(this); //pointer
它也可以在this->id
中使用,只是为了易读性,只为下一个阅读代码的人知道id是类的一个组成部分而不是全局,没有功能优势。
如果您使用调试器,this
也可能是一个可检查的变量。