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

发布时间:2016-12-8 2:29:18 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"《深度探索C++对象模型》--3 Data语意学",主要涉及到《深度探索C++对象模型》--3 Data语意学方面的内容,对于《深度探索C++对象模型》--3 Data语意学感兴趣的同学可以参考一下。

 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就会得到。

上一篇:Spring事物配置的五种方式
下一篇:屏幕旋转学习笔记

相关文章

相关评论