1.局部变量定义的增强
void func()
{
int a;
printf("hello...\n");
int b;
b=10;
}
在C编译器中,运行错误,a和b必须在最开始声明;
在C++编译器中,运行正常,局部变量随时用,随时声明即可。
2.register关键字的增强
register关键字作用:
register a; // 请求编译器让变量a直接放在寄存器里面,速度快
c语言中, register修饰的变量 不能取地址,
C++编译器有自己的优化方式,不使用register也可能做优化
C++中可以取得register变量的地址,C++编译器发现程序中需要取register变量的地址时,register对变量的声明变得无效。
void func()
{
register int a = 0;
printf("&a = %x\n", &a);
}
在C中运行错误,C++中正常运行。
不使用register也会做优化:
void func()
{
for(int i=0;i<100;i++)// 频繁使用的变量i,C++会自动放进寄存器中优化
{
printf("i=%d;\n",i);
}
}
3.变量检测增强
int g_var=210;
int g_var;
int main(int argc, char *argv[])
{
printf("g_var = %d\n", g_var);
return 0;
}
在C语言中,输出正常:210;
在C++中,运行出错,变量重定义。
4.Struct关键字的类型增强
C语言struct定义了一组变量的集合,C编译器不认为这是一种新的类型;
C++编译器中的struct是一个新类型的定义声明;
struct Student
{
char name[100];
int age;
};
int main(int argc, char *argv[])
{
Student s1 = {"wang", 1};
// C语言中必须前面加上struct关键字:
// struct Student s1 = {"wang", 1};
// struct Student s2 = {"wang2", 2};
Student s2 = {"wang2", 2};
return 0;
}