平时学习中,总是会遇到一些自己不懂的小知识,在这里记下来:
1、c=num1+++num2;
到底是c=(num1++)+num2;还是c=num1+(++num2);这要根据编译器来决定,不同的编译器可能有不同的结果。
2、逗号运算符
在C语言中,多个表达式可以用逗号分开,其中用逗号分开的表达式的值分别结算,但整个表达式的值是最后一个表达式的值。
3、程序实体的生存期和作用域
每个程序实体在程序执行中都有从创建到被撤消的一段时间,这段时间就称为该程序实体的生存期。在生存期内程序实体的标识符与它的存储区相关联。因此,程序实体的生存期由系统为其分配的内存方式所决定。C++为程序实体提供了四种内存分配方式:静态分配(编译器预分配)、栈分配(自动分配)、堆分配(动态分配)、只读分配。
(1) 静态分配
系统可以为每个程序开辟一个固定的静态数据区。存于这区域中的程序实体在编译时即被预分配存储空间,并且在程序开始执行时就被创建,一直到程序结束才被撤消,故称为永久存储。静态分配的特点是与程序共存亡,具有静态生存期。这种分配适合于那些在程序中用得不多,但要为多个函数共用的程序实体。
(2) 栈分配
栈是系统为程序开辟的活动存储区,它是程序使用最频繁的存储区。一个实体,一旦在一个函数内部或一个块内部被声明,系统便在栈中创建它们;该块或函数执行结束,遂将其弹出撤消。这种程序实体具有局部生存期,即它与所在的块共存亡。这种分配适合于那些在程序中使用频繁的程序实体,随建随撤,节省空间。
(3) 动态分配
动态分配将产生一种完全由程序员控制生存的程序实体。在C++中,程序员可以利用专门的运算符new和delete来创建和撤消程序实体。
(4) 只读分配
即用const声明的程序实体,可以认为是被创建在程序的只读存储区中。
作用域实际上就是程序实体的作用范围,而在此范围之外,该程序实体是不可见的。C++的这种特性使得在同一个程序中使用两个名字相同的程序实体成为可能,只要这两个程序实体的作用域不同就行。
4、继承和派生有一个基本的原则,就是基类对象能够使用的地方,也能用同样的方法使用派生类的对象。有时候到底是使用继承还是组合是要好好考虑的。