Function语意学

  1. C++的设计准则之一:nostatic member function 至少必须和一般的nonmember function有相同的效率。

    a、改写函数原型,在参数中增加this指针

    b、对每一个"nonstatic data member的存取操作"改为由this指针来存取

    c、将member function重写为一个外部函数,经过"mangling"处理(不许要处理的加上 extern "C")

  2. 执行期虚函数调用步骤

    a、通过vptr找到vtbl 

    b、通过 thunk技术以及topoffset调整this指针 (因为成员函数里面可能调用了成员变量) 

    c、通过 virtual class offset找到虚基类共享部分的成员 

    d、执行vtbl中对应slot的函数

  3. 静态成员函数 static member functions

    a、不能访问非静态成员 

    b、不能声明为const、volatile或virtual 

    c、参数没有this 

    d、可以不用对象访问,直接  类名::静态成员函数  访问

  4. vtable虚函数表一定是在编译期间获知的,其函数的个数、位置和地址是固定不变的,完全由编译器掌控,执行期间不允许任何修改。

  5. C++多态(polymorphism)表示"以一个public base class的指针(或者reference),寻址出一个derived class object"

  6. vtable的内容:

    a、virtual class offset(有虚基类才有) 

    b、topoffset 

    c、typeinfo 

    d、继承基类所声明的虚函数实例,或者是覆盖(override)基类的虚函数 

    e、新的虚函数(或者是纯虚函数占位)

  7. 函数性能

    Inline Member > (Nonmember Friend, Static Member, Nonstatic Member) > Virtual Member > Virtual Member(多重继承) > Virtual Member(虚拟继承)


你可能感兴趣的:(Function语意学)