this指针
1. 使用范围
1. 只能在成员函数中只用
2. 全局函数中不可使用
全局函数是定义在类外的函数,成员函数就是定义在类中的函数。
3. 静态函数中不可使用
class a
{
static int fun(){}
};
2. 创建时间
this在成员函数的开始执行前构造,在成员的执行结束后清除。
3. 存放位置
this指针会因编译器不同而有不同的放置位置。
可能是栈,也可能是寄存器,甚至全局变量。
在汇编级别里面,一个值只会以3种形式出现:立即数、寄存器值和内存变量值。不是存放在寄存器就是存放在内存中,它们并不是和高级语言变量对应的。
在实际应用中,this应该是个寄存器参数
注意:
1. this指针不占用对象的空间
this相当于非静态成员函数的一个隐含的参数,不占用对象的空间。它跟对象之间没有包含关系,或者直接占用一个寄存器。
2. this指针是如何传递类中的函数的?
大多数编译器通过ecx寄存器传递this指针。事实上,这也是一个潜规则。一般来说,不同编译器都会遵从一致的传参规则,否则不同编译器产生的obj就无法匹配了。
3. 只有获得一个对象后,才能通过对象使用this指针
this指针只有在成员函数中才有定义。
因此,获得一个对象后,也不能通过对象使用this指针。
所以,我们无法知道一个对象的this指针的位置(只有在成员函数里才有this指针的位置)。
当然,在成员函数里,你是可以知道this指针的位置的(可以通过&this获得),也可以直接使用它。