美文网首页
普通成员函数的调用

普通成员函数的调用

作者: 404Not_Found | 来源:发表于2021-09-02 08:44 被阅读0次
    • 作者: 雪山肥鱼
    • 时间:20210903 07:47
    • 目的: 普通成员函数的调用
    using namespace std;
    class MYACLS
    {
    public:
        int m_i;
        void myfunc(int abc)
        {
            m_i += abc;
        }
    };
    
    void gmyfunc(MYACLS *ptmp,int abc)
    {
        ptmp->m_i += abc;
    }
    
    int main()
    {   
    
        MYACLS myacls;
        myacls.myfunc(18); //调用成员函数
    
        gmyfunc(&myacls, 18); //调用全局函数
    
        printf("MYACLS::myfunc的地址=%p\n", &MYACLS::myfunc);
    
        return 1;
    }
    

    普通成员函数的调用不应该比全局函数调用效率差
    编译器内部实际上是堆成员函数 myfunc()的调用,转换成了对全局函数的调用。这里的全局我的理解是,跟着类走,而不是跟着函数走。
    成员函数有独立的内存地址,跟着雷走,并且成员函数的地址在编译的时候就是确定好的。

    • 编译器会给成员函数增加一个this指针的形参,指向其生成对象。
    void myfunc(int abc)
    {
        m_i += abc;
    }
    
    void _ZN6MYACLS6myfuncEi(MYACLS *const this, int abc) 
    {
      this->m_i += abc;
    }
    

    注意 this 的类型:MYACLS * const this, this 本身的值不会改变。

    相关文章

      网友评论

          本文标题:普通成员函数的调用

          本文链接:https://www.haomeiwen.com/subject/vmvhwltx.html