c++this指针

为什么要有this指针?

this 指针在 C++ 中存在的主要原因是为了在成员函数内部提供一种方式来引用调用该函数的对象本身。当成员变量和局部变量或参数名相同时,this 指针允许我们区分它们。通过 this-> 前缀,我们可以明确指定我们正在引用的是成员变量而不是局部变量或参数。

比如:

/* 键值对 */
struct Pair {
  public:
    int key;
    string val;
    Pair(int key, string val) {
        this->key = key;
        this->val = val;
    }
};

这是一个创建键值对的过程,this->keythis->val表示的是当前对象实例的成员变量keyval。这里的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指针不能随意修改,因为它的值在成员函数定义时就已经确定了,指向当前对象。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值