本文旨在讲解C++中this关键字,以及其相关作用!
this 是 C++ 中的一个关键字,也是一个 const 指针,它指向当前对象,通过它可以访问当前对象的所有成员。
下面来看一下关于this这个关键字的实例!
- class Data
- {
- private:
- int _year;
- int _month;
- int _day;
- public:
- void Init(int year,int month,int day)
- {
-
- cout << "this的地址"<<this << endl;
- _year = year;
- _month = month;
- _day = day;
- }
- }
- int main()
- {
- Data D1;
- Data D2;
- cout <<"D1的地址:"<< & D1 << endl;
- cout <<"D2的地址:"<< & D2 << endl;
- D1.Init(2013,11,15);
- D2.Init(2013, 11, 16);
- }
通过观察上述代码,在main函数内部里,当使用Init函数时,并没有对Init函数进行传相应类的参数,那么编译器是如何将其正确赋值给相应的类呢?
这时就引出了C++的关键字this!编译器通过this关键字来自动匹配传递的参数!下面来看一下msdn中关于对this关键字的简单介绍!

简单介绍一下上述的意思,“this”指针仅仅存在于class,struct,union类型,它指向成员功能调用的目标,静态变量没有this这个指针!
通过下面代码,可以对this指针会有更深一步的认识!
- class Data
- {
- private:
- int _year;
- int _month;
- int _day;
- public:
- void Init(int year,int month,int day)
- {
-
- //this在实参和形参的位置不能显写,但是在类中变量可以显写!
- //this = nullptr;
- //通过在类中对this的操作,可以证明this指针确实存在!
- cout << "this的地址"<<this << endl;
- /* this->*/_year = year;
- /*this->*/_month = month;
- _day = day;
- }
- void print()
- {
- cout << _year << "-";
- cout << _month << "-";
- cout << _day;
- cout << endl;
- }
- };
-
- int main()
- {
- Data D1;
- Data D2;
-
- //通过观察D1,D2的地址,可以看出D1中的this的地址和D1的地址相同,可以推出this指针实际上是指向类的地址的指针的!
- cout <<"D1的地址:"<< & D1 << endl;
- cout <<"D2的地址:"<< & D2 << endl;
- D1.Init(2013,11,15);
- D2.Init(2013, 11, 16);
- D1.print();
- D2.print();
- }
上述代码运行调试过后结果入下:

通过上述调试的结果,可以更深了解this指针!
1. this指针的类型:类类型* const,即成员函数中,不能给this指针赋值。
上实例当对this指针赋予nullptr时,编译器会报错,错误信息入下:
![]()
![]()
2. 只能在“成员函数”的内部使用。
3. this指针本质上是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给
this形参。所以对象中不存储this指针。(可以通过对类的大小来判断类中是否存在了this指针!)
4. this指针是“成员函数”第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传
递,不需要用户传递。
this 实际上是成员函数的一个形参,在调用成员函数时将对象的地址作为实参传递给 this。不过 this 这个形参是隐式的,它并不出现在代码中,而是在编译阶段由编译器默默地将它添加到参数列表中。
this 作为隐式形参,本质上是成员函数的局部变量,所以只能用在成员函数的内部,并且只有在通过对象调用成员函数时才给 this 赋值。
至此,关于this指针的介绍结束,若还有其他特性,欢迎读者来进行补充,也欢迎各位指出不足!
