C++设计时有一个要求,类普通成员函数的调用性能要和全局函数差不多。所以编译器在处理类的普通成员函数的宗旨是将其当作全局函数来处理。
为了达到上述目的,编译器会对类的普通成员函数进行如下操作:
-
在函数形参中第一位插入类对象的 this 指针。
-
修改函数名称,使之与类名等信息挂钩。这样也就解决了既然将普通成员函数当作全局函数,但是各个类中有重名函数的情况。
栗子:
class A
{
public:
void func(){}
};
int main()
{
A a;
a.func();
return 0;
}
执行 nm test.o > test.txt 指令,在生成的文件中会找到如下标识:
00000000000006a8 W _ZN1A4funcEv
该标识就是编译器眼中对函数 func 的认识,即:重命名。
综上,编译器通过在类普通成员函数中插入类对象的 this 指针和重命名函数名的方式来重置普通成员函数。
(SAW:Game Over!)