1、Data Member的绑定

(1)“memberrewriting rule”,一个inline函数实体,在整个class声明未被完全看见之前,是不会被评估求值的。所以通常将inline定义放于类声明之外。

(2)但是对于argumentlist中的名称还是会在第一次遭遇时适当地决议。在extern和nestedtype name之间 非直觉绑定操作还是会发生,为了避免此种问题,总是把“nested type name”放于class的起始处。

2、Data member的布局

C++standard,在同一个accesssection(private等)中,members的排列只需符合“较晚声明的members在classobject中有较高的地址”即可,即members并一定连续排列。

3、Data member的存取

(1)对于staticdata members,存放在程序的datasegment中,不在于classobject中。获取一个指向其的指针时,会得到一个指向其数据类型的指针。对于不同class的同名staticdata member会采用一种机制来处理。

(2)对于nonstaticdata members,必须与classobject相关联。当用一个memberfunction 处理nonstaticdata members,会发生“implicitclass object”,即添加this指针。存取时需要在class object的起始地址再加上偏移地址。

4、“继承”与Data member

(1)多重继承时,多重派生对象和最左端的base class具有相同的起始地址,至于第二或后续的base class的地址需要加(减)中间的base class subobjects的大小。

5、对象成员的效率

对于关心效率的操作,应该实际测试,而不能推断,而且某些优化操作不一定进行。

6、指向data members的指针

(1)区分“没有指向任何data member的指针”和“指向第一个data member的指针”?

每个真正的member offset的值都被加上1,所以编译器取地址时一般都减1。

(2)取一个nonstatic data member的地址,会得到在class中的offset,而取一个绑定于真正的class object身上的data member的地址,将会得到该member在内存中的真正地址,然后减去offset就会得到。

《深度探索C++对象模型》--3 Data语意学相关推荐

  1. 深度探索C++ 对象模型(6)-Data member的存取

    nonstatic data member 需要在class object起始地址加上该member的偏移. class A {public: int x; int y;}; A a; a.y = 0 ...

  2. 深度探索C++ 对象模型(6)-Data member的绑定

    防御性程序设计 1).将class声明起头处放data member; 代码示例: class Point3d{ float x,y,z; public://etc } 2). class的声明处放i ...

  3. 深度探索C++ 对象模型(7)-Data member的布局(虚继承)

    虚拟继承 namespace ObjectMultiDerived {class Point2d {public:// has virtual functionsvirtual void print( ...

  4. 深度探索C++ 对象模型(7)-Data member的布局(多重继承)

    多重继承 namespace ObjectMultiDerived {class Point2d {public:// has virtual functionsvirtual void print( ...

  5. 深度探索C++ 对象模型(7)-Data member的布局(无继承、继承无多态、继承多态、多层继承)

    无继承 继承无多态 继承多态 虚表 : 用来存放基类的每一个虚函数,再加上首位的一个slots(支持RTTI). 每个class object导入一个vptr,提供执行期的链接,使得每一个class ...

  6. 《深度探索C++对象模型》--5 构造析构拷贝 6 执行期语意学

     <深度探索C++对象模型>--5构造.析构.拷贝语意学 1.纯虚函数: (1)C++可以定义和调用一个纯虚函数,不过只可以静态调用,不可以由虚拟机制调用. 注意:pure virtu ...

  7. 《深度探索C++对象模型》读书笔记第五章:构造析构拷贝语意学

    <深度探索C++对象模型>读书笔记第五章:构造析构拷贝语意学 对于abstract base class(抽象基类),class中的data member应该被初始化,并且只在constr ...

  8. 《深度探索C++对象模型(Inside The C++ Object Model )》学习笔记

    来源:http://dsqiu.iteye.com/blog/1669614 之前一直对C++内部的原理的完全空白,然后找到<Inside The C++ Object Model>这本书 ...

  9. 深度探索C++对象模型第2章 构造函数语义学

    默认构造函数 两个误区: 1 任何class如果没有定义默认构造函数,就会被合成一个出来:只有在某些情况下被合成 2 编译器合成出来的默认构造函数会明确设定class中每一个数据成员的默认值 :默认值 ...

  10. [读书笔记]《深度探索C++对象模型》

    文章目录 前言 思维导图 第一章 关于对象 第二章 构造函数语意学 构造函数 拷贝构造函数 初始化列表 第三章 Data 语意学 第四章 Function 语意学 非静态成员函数 静态成员函数 虚成员 ...

最新文章

  1. 【原】为DevExpress的ChartControl添加Y轴控制 和 GridControl中指定列添加超级链接
  2. 妙用 Intellij IDEA 创建临时文件,Git 跟踪不到的那种
  3. Java变量的修饰符
  4. 【技术综述】图像与CNN发家简史,集齐深度学习三巨头
  5. Postgres主进程文件—postmaster.pid
  6. 将Notepad++配置为Ruby编译器
  7. 【NeurIPS2020】Google点针图网络,Pointer Graph Networks
  8. Android Studio的Android Monitor窗口中把标签拉出来之后放不回去的解决方法
  9. 爬了7000+条内衣信息,只为探究妹纸们的偏好!
  10. 拓端tecdat|R语言用Hessian-free 、Nelder-Mead优化方法对数据进行参数估计
  11. Unity学习日志_NGUI简介
  12. python气象数据分析_气象数据分析--数据预处理
  13. 2022年地理信息系统与遥感专业就业前景与升学高校排名选择
  14. python将图片转为矢量图
  15. 合同html样式,css 合同打印print--水印
  16. dvm_lock_sample 解析
  17. 火狐开发----Web开发者工具
  18. Js逆向教程19-websocket介绍
  19. python:实现红黑树算法(附完整源码)
  20. 如何管理和使用哪些命令操作MySQL数据库?(基本操作,SQL语言,DDL,DML,DQL,DCL,Windows字符和图形界面MySQL安装)

热门文章

  1. 可视化-echarts流向图制作及recharts
  2. 自动驾驶技术-环境感知篇:多传感器融合技术
  3. 浅谈百度新一代query-ad 推荐引擎如何提升广告收益率
  4. 一个可供中小团队参考的微服务架构技术栈
  5. 超摩尔定律!OpenAI官宣AI算法效率每16个月翻一番
  6. 埃森哲咨询公司为何拥有世界上最多的区块链职位空缺
  7. 他用五年研究百位百万富翁生活习惯 结果很震撼
  8. 数据库专家Michael Stonebraker获得2014年图灵奖
  9. Java-CentoOS 7安装JDK8 (rpm格式 和 tar.gz格式) 多JDK设置默认的Java 版本
  10. Android开发工具新接触