【深度C++】之“this”

0. 什么是this指针

this是C++中的一个关键字,通常称其为this指针。它是一个指向本类对象的常量指针

// 这是一个顶层const,this指针的值是不允许被修改的
// 即只能指向本类的一个实例自己
ClassType *const this;

例如我定义了一个类MyClass,那么在类的作用域中可以使用this

class MyClass  {
    int a_;
public:
    MyClass(const int &a) : a_(a) {}
    void Print() {
        cout << this->a_ << endl;
    }
};
// 只是示例,当然这完全没有必要

1. this是成员函数的额外隐式参数

C++编译器在编译程序后,通常是将类的成员数据函数代码分开存放。

这样的话n个同样的类的实例,有n个成员数据,但是只有一套代码来处理,极大程度上优化了存储空间。

那么,C++是如何区分不同的实例的呢?答案就是this指针

其实,编译器会隐式的在所有成员函数的参数列表中添加一个名为this的额外隐式参数来访问该实例中的成员数据,该参数的类型就是指向本类对象的常量指针

比如上面的Print,你可以简单的认为编译器重写成了如下形式:

void MyClass::Print(MyClass *const this) {
    ...
}

在调用点:

MyClass::Print(&my_class);

2. const成员函数的this指针

成员函数是可以声明为const的,其作用就是为该类const对象提供接口(参考【C++深陷】之“const”第8节)。

当成员函数声明为const之后,编译器实际做的工作是将this指针改为指向常量对象的常量指针,即:

// 既包含顶层const,又包含底层const
const MyClass *const this

这样就实现了约束成员函数不可以修改成员数据。

3. this的使用

一般在两种情况下会使用this:

  1. 区分类成员变量和外部参数。
  2. 返回*this,即返回类自身,通常在运算符重载处使用。

4. 总结

this指针是类里一个常用的关键字,用来去分成员变量和外部参数,或者返回自身。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值