• C++里面this关键字的用法和功能


    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就是结构的指针了。

  • 相关阅读:
    struts2 constant详解
    大图片上传(ImageIO,注意有的图片不能上传时因为他是tiff格式)
    Spring提供的iBatis的SqlMap配置
    2013-7-31hibernate二级缓存
    2013-7-30。。。。难得闲
    POI导出大量数据的简单解决方案
    Tomcat优化详细2
    Tomcat优化详细1
    Tomcat优化方案
    java链表实现
  • 原文地址:https://www.cnblogs.com/Xieyingpeng/p/13767372.html
Copyright © 2020-2023  润新知