网站百科怎么做,汕头网站建设制作公司,网站开发php怎么样,网上骗人彩票网站是怎么做的文章目录 什么是this指针this指针存在的意义this指针的特性this指针存在哪里this指针可以为空吗 什么是this指针
C编译器给每个非静态成员函数增加了一个隐藏的指针参数#xff0c;让该指针指向当前对象#xff08;函数运行时调用该函数的对象#xff09;#xff0c;在函数… 文章目录 什么是this指针this指针存在的意义this指针的特性this指针存在哪里this指针可以为空吗 什么是this指针
C编译器给每个非静态成员函数增加了一个隐藏的指针参数让该指针指向当前对象函数运行时调用该函数的对象在函数体中所有成员变量的操作都是通过该指针去访问。只不过所有的操作对用户是透明的即用户不需要来传递编译器自动完成。
this指针存在的意义
this指针是一个指向当前对象的指针用于在非静态成员函数中访问当前对象的成员。
主要意义 区分对象实例类的代码段是共享的每个对象实例只保存自己的成员数据this指针确保每个成员函数正确的访问属于当前对象实例的成员 隐式传递this指针是隐式传递给非静态成员函数的一个特殊参数。在调用非静态成员函数时编译器会自动在底层将调用该函数的对象的地址作为this指针传递给该函数。这样我们在定义成员函数时无需显式声明this参数而在调用成员函数时也不需要手动传递对象的地址 成员访问this指针使得成员函数可以访问当前对象的非静态成员变量和其他非静态成员函数它扮演着连接成员函数与对象的桥梁使得成员函数能够操作所属的对象
this指针的特性
this指针的类型类类型*const只能在成员函数的内部使用this指针本质上其实是一个成员函数的形参是对象调用成员函数时将对象地址作为实参传递给this形参this指针是成员函数第一个隐含的指针形参一般情况由编译器通过ecx寄存器自动传递不需要用户传递
this指针存在哪里
编译器在生成程序时加入了获取对象首地址的相关代码。并把获取的首地址存放在了寄存器ECX中(VC编译器是放在ECX中其它编译器有可能不同)。也就是成员函数的其它参数正常都是存放在栈中。而this指针参数则是存放在寄存器中。类的静态成员函数因为没有this指针这个参数所以类的静态成员函数也就无法调用类的非静态成员变量。
this指针可以为空吗
可以为空当我们在调用函数的时候如果函数内部并不需要使用到this,也就是不需要通过this指向当前对象并对其进行操作时才可以为空(当我们在其中什么都不放或者在里面随便打印一个字符串)如果调用的函数需要指向当前对象并进行操作则会发生错误空指针引用