1.this指针的用处

  一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。  

2.this指针的使用

一种情况就是,在类的非静态成员函数中返回类对象本身的时候,直接使用 return *this;另外一种情况是当参数与成员变量名相同时,如this->n = n (不能写成n = n)。

3.类的this 指针的特点

(1)this只能在成员函数中使用。

全局函数、静态函数都不能使用this.

实际上,成员函数默认第一个参数为T * const this。

如:

class A

{

public:

 int func(int p)

 {

 }

};

其中,func的原型在编译器看来应该是:

int func(A * const this,int p);

(2)由此可见,this在成员函数的开始前构造,在成员函数的结束后清除。

这个生命周期同任何一个函数的参数是一样的,没有任何区别。

当调用一个类的成员函数时,编译器将类的指针作为函数的this参数传递进去。如:

A a;

a.func(10);

此处,编译器将会编译成:

A::func(&a,10);

看起来和静态函数没差别,对吗?不过,区别还是有的。编译器通常会对this指针做一些优化,因此,this指针的传递效率比较高--如VC通常是通过ecx寄存器传递this参数的。

注意:this指针只能放在第一行。

4.this指针存放在何处?堆、栈、全局变量,还是其他?

this指针会因编译器不同而有不同的放置位置。可能是栈,也可能是寄存器,甚至全局变量。在汇编级 别里面,一个值只会以3种形式出现:立即数、寄存器值和内存变量值。不是存放在寄存器就是存放在内 存中,它们并不是和高级语言变量对应的。

5. this指针是如何访问类中的变量的?

如果不是类,而是结构体的话,那么,如何通过结构指针来访问结构中的变量呢?如果你明白这一点的话,就很容易理解这个问题了。

在C++中 ,类和结构是只有一个区别的:类的成员默认是private,而结构是public。

this是类的指针,如果换成结构,那this就是结构的指针了。

最新文章

  1. SqlServer-无限递归树状图结构设计和查询
  2. sscanf提取字符串中的数据php
  3. Dreamweaver扩展注意事项
  4. SQL Server发布订阅功能研究
  5. ALV 输入数据时数字缩小一千倍的问题解决
  6. 转载 ---> UITableViewCell的分割线
  7. $.getJSON异步请求和同步请求
  8. [开发笔记]-sqlite数据库在使用时遇到的奇葩问题记录
  9. python—cookielib模块对cookies的操作
  10. JS apply()的使用详解
  11. vue中使用stompjs实现mqtt消息推送通知
  12. HDFS Federation
  13. [AI开发]将深度学习技术应用到实际项目
  14. IDEA手动创建JFinal项目
  15. hdu 5776 抽屉定理
  16. kafka系列三、Kafka三款监控工具比较
  17. WPF 透明窗体
  18. Fast Newman-FN算法以及模块度定义介绍
  19. 初识Qt文字绘制
  20. ls: Call From hdoop2/192.168.18.87 to hdoop2:8020 failed on connection exception: java.net.ConnectException: 拒绝连接; For more details see

热门文章

  1. insert into select 和select into from 备份表
  2. uniapp微信小程序获取当前用户手机号码(前端)
  3. Git撤销文件修改
  4. Maven依赖管理系统
  5. 【SpringBoot】05.SpringBoot整合Listener的两种方式
  6. “谈谈MySQL的基数统计”
  7. 手把手教你使用rpm部署ceph集群
  8. 与pandas初相识
  9. ubuntu13.04修改默认启动内核
  10. 学习一下 Spring Security