什么是 this 指针?
C++this指针,一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。
this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,
编译器会自动将对象本身的地址作为一个隐含参数传递给函数。
this指针是类的一个自动生成、自动隐藏的私有成员,它存在于类的非静态成员函数中,
指向被调用函数所在的对象。全局仅有一个this指针,当一个对象被创建时,this指针就存放指向对象数据的首地址。
this 指针特性
1 this指针是类 类型的指针 ,它不可修改;
2 只能在成员函数的内部使用;
3本质是成员函数的形参,形参不存储,所以不会影响成员函数的大小sizeof()
4 this 指针是成员函数隐藏的第一个指针形参
this 指针的传递(由编译器来维护)
:————————this call约定1成员函数调用约定 – ---->ecx寄存器传递
: ———————— 2 cdecl 约定——————————>this指针压栈(push)
this 指针不能修改;
1 this 指针存在哪里?
this指针无需显式储存内存中。只要存储对象的内存位置确定,对应的this指针就被确定了。
所以, 不存在所谓的this的“位置”,只是this表示了对象的存储位置而已。
&this违反语义规则,是错误的用法,不会编译通过。
2 this指针指向可以为空吗 ?this 指向NULL?
答案是 this指针 完全可以为空 ,调用成员函数时,如果访问“成员变量" ,程序一定崩溃(因为成员变量通过this指针访问),不访问成员变量时就不会崩溃;
3 编译器 怎么识别类?
1 先识别类名
2 识别类中成员变量
3 类的 功能(识别成员函数,并对成员函数进行改写 (1 ,this) );·
#1:this指针是什么时候创建的?
this在非静态成员中有意义,作为右值可以直接在编译时确定其存在,运行时无所谓创建。
#2:this指针存放在何处?堆,栈,全局变量,还是其他?
由上一问可知,this指针无需显式储存内存中。只要存储对象的内存位置确定,对应的this指针就被确定了。