第四章:Function语义学:成员的各种调用方式

一、非静态成员函数:

  1.改写函数的signature(函数名,函数参数个数,函数参数):①增加this指针作为参数。②将函数内部对成员的访问改写成经由this指针访问③将成员函数重新写成一个经过mangling的外部函数。

  2。Name Mangling:函数的名字被编译器修改成内部使用的名字,用于链接期使用。相反将名字恢复为源程序代码中的名字的过程叫demangling。

   作用:用于区分不同的重载函数,实现重载并且帮助编译器检查不正确的重载调用。

二、虚成员函数:

  1.将函数调用转化为通过指向虚函数表的指针vptr的间接调用,其余与非成员静态函数相同。(vptr也会被mangled,因为可能存在多个vptr)

三、静态成员函数:

  1.以前没有静态成员函数时的调用:((Ponit3d*)0)->object_count(); //将0转化为一个对象来调用成员函数

  2.性质:①不能直接存取类中的非静态成员②不能被声明为const、volatile或virtual.③不需要经由对象调用(但是可以这么做)

  3.编译器你将其转化为一般的非成员函数的调用(也会被mangled)

  4.对静态成员函数取地址将得到其内存地址(同普通函数一样),所以&Point3d::object_count()得到的类型是普通函数指针unsigned int (*)(),而不是成员函数指针。

     

第四章:Function语义学:成员的各种调用方式

上一篇:Redis核心技术与实战


下一篇:将xacro格式文件转换为urdf格式并检查格式是否正确常用方式