C++中的this->member VS member
this->member VS member in C++
这有什么区别:
int MyClass::getId() {
return this->id;
}
还有这个:
int MyClass::getId() {
return id;
}
在 C++ 中?
第一个示例将查找名称 "id" 的范围限制为 class MyClass 的成员。
第二个例子没有。
这会有所不同,例如MyClass 没有成员 "id",或者如果当前方法有同名的局部变量或参数。
这取决于上下文。示例:
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
}
};
假设你的class有一个名为id
的成员变量,没有区别。即使你有一个全局id
变量,成员变量总是优先的。
你的下一个问题是:
那么为什么存在 this
关键字呢?
有些情况下您绝对需要它。
一个例子是您想要一个函数将 pointer/reference(*) 返回给对象本身:
return *this; //reference
return this; //pointer
另一种是你想将它作为参数传递给函数
some_function(*this); //reference(&) or value, depends on some_function signature
some_function(this); //pointer
它也可以用在this->id
中,只是为了易读性,只是为了让下一个阅读代码的人立即知道id是class的组成部分而不是全局的,没有功能优势.
如果您使用调试器,this
也可能是它可以检查的变量。
这有什么区别:
int MyClass::getId() {
return this->id;
}
还有这个:
int MyClass::getId() {
return id;
}
在 C++ 中?
第一个示例将查找名称 "id" 的范围限制为 class MyClass 的成员。
第二个例子没有。
这会有所不同,例如MyClass 没有成员 "id",或者如果当前方法有同名的局部变量或参数。
这取决于上下文。示例:
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
}
};
假设你的class有一个名为id
的成员变量,没有区别。即使你有一个全局id
变量,成员变量总是优先的。
你的下一个问题是:
那么为什么存在 this
关键字呢?
有些情况下您绝对需要它。
一个例子是您想要一个函数将 pointer/reference(*) 返回给对象本身:
return *this; //reference
return this; //pointer
另一种是你想将它作为参数传递给函数
some_function(*this); //reference(&) or value, depends on some_function signature
some_function(this); //pointer
它也可以用在this->id
中,只是为了易读性,只是为了让下一个阅读代码的人立即知道id是class的组成部分而不是全局的,没有功能优势.
如果您使用调试器,this
也可能是它可以检查的变量。