为什么要有this指针?
this
指针在 C++ 中存在的主要原因是为了在成员函数内部提供一种方式来引用调用该函数的对象本身。当成员变量和局部变量或参数名相同时,this
指针允许我们区分它们。通过 this->
前缀,我们可以明确指定我们正在引用的是成员变量而不是局部变量或参数。
比如:
/* 键值对 */
struct Pair {
public:
int key;
string val;
Pair(int key, string val) {
this->key = key;
this->val = val;
}
};
这是一个创建键值对的过程,this->key
和this->val
表示的是当前对象实例的成员变量key
和val
。这里的this
指针用来区分构造函数的参数和类的成员变量。如果没有this
,那么代码中的key = key;
和val = val;
将会导致赋值操作实际上是在尝试将参数赋值给它们自己,而不是给对象的成员变量。
在大多数情况下,如果成员变量和参数名不同。编译器能够自动区分成员变量和参数。因此,上述构造函数也可以简化为:
Pair(int key, string val) {
key = key; // 这实际上会导致无限递归,因为左边的key是参数,右边的key也是参数
val = val; // 同上
}
// 更正后的版本,避免命名冲突
Pair(int k, string v) {
key = k;
val = v;
}
但是,当参数名和成员变量名相同时,需要使用this
指针来避免歧义:
Pair(int key, string val) {
this->key = key; // 将参数key的值赋给对象的成员变量key
this->val = val; // 将参数val的值赋给对象的成员变量val
}
注意:
- this指针不能随意修改,因为它的值在成员函数定义时就已经确定了,指向当前对象。