Chester的小院

无印良品

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

文章分类 -  C\C++

摘要:struct 中的member variable 的offset的宏定义#define offsetof(s,m) (size_t)&reinterpret_cast<const volatile char&>((((s *)0)->m))定义:#define offsetof(type, f) ((size_t) ((char *)&((type *)0)->f - (char *)(type *)0))解释:【akirya】:先将0转化为 type*类型的指针,然后取得成员变量的地址,在减去0最后得到的就是 成员变量的偏移地址.【Jarryl 阅读全文
posted @ 2011-04-13 01:01 chester_lp 阅读(467) 评论(0) 推荐(0)

摘要:位域有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几 个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位域来表示。一、位域的定义和位域变量的说明位域定义与结构定义相仿,其形式为:struct 位域结构名{ 位域列表 };其中位域列表的形式为: 类型说明符 位域名:位域长度例如:struct bs{ 阅读全文
posted @ 2011-04-13 00:59 chester_lp 阅读(150) 评论(0) 推荐(0)

摘要:C++ standard 不强制规定“base class subjects的排列次序”“不同存取层记得data members的排列次序” ,也不规定“virtual funcitons 和 virtual base class“的实现细节。当一个类并没有任何声明的时候,它实做一个对象的时候,实际分配了1个字节的大小的空间。从而使得这个对象能够有独一无二的地址空间。而一个对象的大小不仅仅包含了该类所声明的nonstatic data members,而且还受到了,1、支持语言特性(各种virtual特性)。2、边界对齐特性。的影响。形成其最终大小。3.1 Data Member的绑定(The 阅读全文
posted @ 2011-04-13 00:16 chester_lp 阅读(238) 评论(0) 推荐(0)

摘要:4.1 Member的各种调用方式Nonstatic Member Functions:速度和一般的Nonmember function 有相同的效率。 编译器会对nonstatic member function进行改造。加入this参数,改变函数内部的对member data 的使用方法(使用this指针来存取!),改变函数的名字--相当于nonmember function。这里面有一个函数名字的处理问题(name mangled处理)。Virtual Member Funciton:首先虚函数的调用方式若是指针调用,则是通过指针,找到vptr,打出偏移找到函数地址进行调用。其次,vpt 阅读全文
posted @ 2011-04-13 00:16 chester_lp 阅读(254) 评论(0) 推荐(0)

摘要:2.1 Default Constructor 的构建操作 Default Constructors只有当编译器需要default constructor的时候才会合成出一个constructor, 只有下面的四种情况才会有nontrivial default constructor产生,其余的都是trivial default constructor。(nontrivial是合成的有用的默认函数,trivial则是没多大用处的构造器) a、带有Default Constructor 的 Member Class Object如果一个class自己没有定义constructor,但是内含一个m 阅读全文
posted @ 2011-04-13 00:14 chester_lp 阅读(345) 评论(0) 推荐(0)

摘要:从准备找工作至今,才阅读完B.Lippman的Inside The C++ Object Model。所以索性整理一下对C++对象模型一书的读书心得。 --by chesterlee第一章 关于对象 首先应该说下C的“算法驱动”思路:C语言中,“数据”和“处理数据的操作”十分开来的。简言之,这样的程序方法叫做“程序性的”,由以功能为导向的函数的算法所驱动,处理的是来自外部的数据。 而在C++中,则使用的是独立的“抽象数据类型abstract data type(ADT)”所驱动。这样符合软件工程的设计。如果不使用virtual,C++本身的class布局及存取时间和struct没有区别。言外之 阅读全文
posted @ 2011-04-13 00:12 chester_lp 阅读(252) 评论(0) 推荐(0)