- 作者: 雪山肥鱼
- 时间: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 本身的值不会改变。
网友评论