博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Function语意学
阅读量:6539 次
发布时间:2019-06-24

本文共 905 字,大约阅读时间需要 3 分钟。

hot3.png

  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(虚拟继承)

转载于:https://my.oschina.net/zengjs275/blog/650873

你可能感兴趣的文章
登录内网账号后,连接不上内网网址
查看>>
安装 MariaDB
查看>>
【deep learning学习笔记】注释yusugomori的DA代码 --- dA.h
查看>>
Ubuntu 12.04 root用户登录设置
查看>>
windows核心编程-互斥器(Mutexes)
查看>>
纯手工打造漂亮的垂直时间轴,使用最简单的HTML+CSS+JQUERY完成100个版本更新记录的华丽转身!...
查看>>
java 为啥变量名前要加个m?
查看>>
探索Android中的Parcel机制(上)
查看>>
c++ 类型定义
查看>>
C#开发微信门户及应用(5)--用户分组信息管理
查看>>
怎样实现前端裁剪上传图片功能
查看>>
程序员提高工作效率的15个技巧【Facebook】
查看>>
ffmpeg+SDL2实现的视频播放器「退出、暂停、播放」
查看>>
2011/7/3 第二次评审
查看>>
Openvswitch手册(2): OpenFlow Controller
查看>>
Cocos2d-JS项目之二:studio基础控件的使用
查看>>
tar解压
查看>>
inheritprototype原型继承封装及综合继承最简实例
查看>>
【磁耦隔离接口转换器】系列产品选型指南
查看>>
Apriori 关联算法学习
查看>>