深入理解C++对象模型
文章平均质量分 80
lim要不断刷新lim
这个作者很懒,什么都没留下…
展开
-
C++函数调用详解
一、 什么是栈帧? 什么是栈帧,相信很多从事C编程的童鞋还是没有搞明白,首先引用百度百科的经典解释:“栈帧也叫过程活动记录,是编译器用来实现过程/函数调用的一种数据结构。”。 实际上,可以简单理解为:栈帧就是存储在用户栈上的(当然内核栈同样适用)每一次函数调用涉及的相关信息的记录单元。也许这样感觉更复杂了,好吧,让我们从栈开始来理解什么是栈帧...二、 栈(用户转载 2015-08-18 16:44:52 · 2789 阅读 · 0 评论 -
类(继承)的内存分配详解
1.基类与派生类的内存分配派生类继承基类 内存分配时,是在于基类对象不同的内存地址处,按基类的成员变量类型,开辟一个同样的类型空间,但注意开辟后派生对象的空间,不是复制基类的成员的值,而是仅仅开辟那种成员类型的空间,未初始化时,里面存在的数是不确定的 然后派生类自己定义的成员变量是排在继承的A类成员下面,如果派生类定义的变量名与基类相同,则此变量覆盖掉继承的基转载 2015-08-18 16:38:46 · 6675 阅读 · 1 评论 -
函数参数传递方式
函数参数传递方式之一:值传递(1)值传递的一个错误认识先看考题一中Exchg1函数的定义:void Exchg1(int x, int y) /* 定义中的x,y变量被称为Exchg1函数的形式参数 */{ inttmp; tmp = x; x = y; y = tmp; printf("x = %d, y = %d.\n", x, y)转载 2015-08-18 07:45:36 · 442 阅读 · 0 评论 -
内联函数
内联函数类似于C里边的宏,只是宏经常有一些不安全因素,比如 宏定义 add() 是 a+b,调用的时候宏定义直接展开,不做任何的判断,如果调用res = add()*c; 得到的代码就是res = a+b*c;不是想要的结果。 内联函数可以理解成一个安全的宏定义,他就是一个真正的函数,只是不用压栈出栈,速度快,而且比宏定义安全,所以利用 短且频率 比较高的函数可以写成内联函数in转载 2015-08-14 10:24:47 · 324 阅读 · 0 评论 -
Data alignment
C语言,在对一个 struct variable使用sizeof operator(操作符)的时候,往往得到的结果并不是我们想象中——struct内所有member的size之和。 当清楚了什么是Data alignment(数据对齐),对这个问题就豁然开朗了。 Data Alignment Data Alignment 并非针对 Data 本身,而是Data(Variab转载 2015-08-31 16:08:16 · 1173 阅读 · 0 评论 -
第二章:拷贝构造函数
拷贝构造函数(copy constuctor)通常C++初级程序员会认为当一个类为没有定义拷贝构造函数的时候,编译器会 为其合成一个,答案是否定的。编译器只有在必要的时候在合成拷贝构造函数。 那么编译器什么时候合成,什么时候不合成,合成的拷贝构造函数在不同情况下 分别如何工作呢?这是本文的重点。拷贝构造函数的定义有一个参数的类型是其类类型的构造函数是为拷贝构造函数。如下:转载 2015-08-19 12:42:10 · 591 阅读 · 0 评论