摘要:
下面的阐述的内容只是对前辈经验的整理。由于早期计算机的内存容量很小,为了尽量节省空间,交换两变量值时不使用中间变量。但这可能暗藏着缺陷。有一个巧妙的函数 swap 是这样编写的:inline void swap(int &a, int &b){ a = a + b; //缺陷1: 可能产生上溢. b = a - b; a = a - b;}引发缺陷 1 的原因是,当 a 和 b 的值比较大,相加之和的实际值大于 int 类型所能表示的数值范围,此时产生上溢。当传入 swap 函数的实参来自同一变量时,将会引发另一个缺陷:int a = 2;// 缺陷 2: 传入同一变量, 变量 阅读全文
摘要:
搞笑版优点:多种功能,加快任务实现。缺点:多重性格,易得精神分裂。严肃版优点:对象可以调用多个基类中的接口。缺点:易产生二义性和钻石型继承问题。 阅读全文
摘要:
重载(overload)是指在相同的作用域内,不同的函数使用相同的函数名,但函数的参数表不同(参数个数不同,或参数类型不同,或二者都不同)。调用的时候根据函数的参数表来区别不同的函数。覆盖(override)是指子类重新定义父类的虚函数。重新定义的函数与被覆盖的虚函数的函数名和参数表都一样,只是函数的实现不同。 阅读全文
摘要:
一个由C/C++编译的程序占用的内存分为以下几个区域:1、栈区(stack)由系统自动分配和释放,用于存放函数的参数值,局部变量值等。其在内存中是一块连续的存储区域,由低地址向高地址延伸。2、堆区(heap)由程序员分配和释放,若程序员不释放,则程序结束时可能由操作系统回收。其存储空间在内存中是不连续,分配方式类似于链表。 3、静态区(static)又称全局区,程序结束后由系统释放,用于存放全局变量和静态变量。初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量则存储在相邻的另一块区域。 4、文字常量区程序结束后由系统释放,用于存储常量,字符串常量就是放在这里的。5、程 阅读全文
摘要:
分配方式:栈由系统自动分配和释放,用于存放函数的参数值,局部变量值等。堆由程序员分配和释放,若程序员不释放,可能在程序结束时由操作系统回收。分配效率:栈的分配效率比堆要高得多,但堆的使用更灵活。空间大小:栈是连续的一块内存区域,其空间较小,是在编译时就确定了的,易产生栈溢出。堆的内存区域是不连续的,其空间较大。碎片问题:堆的使用容易产生碎片,使程序效率降低。而栈则不存在这个问题。 阅读全文