#c++对c增强
- 1 变量随用随定义
- 2 register关键字增强,register关键字请求“编译器”将局部变量存储于寄存器中,c语言中无法取得register变量地址,c++编译器有自己的优化方式,不适用register也可能做优化,并且c++中可以取得register变量地址;c++编译器发现程序中需要取register变量的地址时,register对变量的声明变得无效
- 3 c++语言对全局变量的检测能力增强(检测全局变量重定义)
- 4 struct类型增强,c语言中的struct定义了一组变量的集合,c编译器并不认为这是一种新的类型,c++中的struct是一个新类型的定义声明
- 5 函数类型检测增强,c++中的函数必须有返回类型,函数参数个数必须一致,c++的任意程序元素都必须显式指明类型
- 6 bool类型增强
- 7 三目运算符增强
c语言中三目运算符返回的是数值,三目运算符做左值,要用地址例如*(a<b?&a:&b)=50; c++中三目运算符可以当左值,实际上返回的是变量的引用,可以(a<b?a:b)=50;
- 8 const增强
c语言中可以通过指针操作改变const变量的值。 c++的const变量是真正的常量,例如 const int a = 10;并没有在栈开辟区域,而是在常量区有一个符号表,存放键值对。对a取地址时,相当于对常量10取地址,此时,编译器会临时开辟一个空间temp,让这个指针存放这个临时空间的地址
- 8.1 #define a 20 预处理阶段, 作用域全局
const int a = 20; 编译阶段, 有作用域 - 9 枚举增强
c语言中:
enum season
{
SPR = 0, //默认为0
SUM,
AUT,
WIN
};
void test()
{
enum season s = 2;
if(s == 2)
{
cout << s << endl;
}
}
当成员太多时,例如有10000个,当if(s == 10000)时,难以理解,含义不清(一般每隔10个作为分割,帮助识别)
c++中使用enum season s = 2出错,只能enum season s = AUT;