C++对C的增强:
1.全局变量检测增强
C语言全局变量中允许出现 int n;int n=1;的情况,C++则不允许这种重复定义。
2.函数检测增强
函数中的 参数类型、参数个数(函数调用参数)、返回值 的检测都更加严格。
3.类型转换增强
malloc返回值是void* 通常使用时会有个强行转换。C++语言中对malloc返回值类型的强制转换更加严格。
4.struct 结构增强
①C++中struct的成员允许有函数的出现和调用。
②定义结构变量时只需要结构命名,不需要前面再加struct。
5.bool类型增强
C++中新增的bool类型只占1个字节,情况为非0和0;前者值为1,后者值为0。并且定义时可以用true和false表示。
6.三目运算符增强
C语言里的三目运算符(条件运算符)返回一个值;而C++里返回的是一个变量,这种情况除非C使用一个指针。
7.const 功能增强
1.C语言中的const默认为外部链接 而C++里的const默认为内部链接,从其他文件调用需要使用extern const形式。
2.C语言里的全局const变量是受保护的只读形式,而局部变量里的const装态是一个伪变量的形式(同理不能表示数组长度),可以利用指针等方式修改数值。C++的const则不能被修改。前者的存储形式是分配内存,而后者是以符号表的形式存储。
const分配内存的情况:
1.指针指向const的变量(取地址操作)时,有一个临时分配的内存空间(与变量的存储无关,只代表指针的存储),这一点在引用上同样适用。
2.初始化const变量的是另一个变量,会分配内存空间。
3.extern编译器会给extern const 变量分配内存
4.const自定义数据也会分配内存
尽量用const代替define(宏常量) #undef A 取消宏常量A
1.define无作用域无作用时间,全局全程;const作用域和生存周期为局部函数。
2.define 数据没有类型,不能进行类型检查没有很好的适用性。并且define的数据在预处理阶段完成,编译器不能发现它的问题。
3.宏常量不受命名空间约束,且不能从命名空间调用。