目录
1.对全局变量的检测能力
2.struct类型增强
3.c++中所有变量和函数都必须有类型
4.c++中新增的bool类型
5.三目运算符的加强
6.const的增强
7.对枚举的增强
1.对全局变量的检测能力
- C语言中同时定义两个相同的全局变量编译器并不会报错,而c++中就会报重定义错误
#include<stdio.h>
int g_a;//bss段
int g_a=10;//data段
int main()
{printf("%d",g_a);//最后对打印出10return 0;
}
#include<iostream>
using namespace std;int g_val;
//int g_val = 20;//c++会报g_val重定义
int main(void)
{printf("%d",g_val);
}
2.struct类型增强
- C语言中创建结构体类型的变量必须加struct关键字
#include<stdio.h>
struct student
{int id;char name[34];
};
int main()
{struct student s1;//student s1;//errreturn 0;
}
- c++可以不加struct结构体关键字
#include<iostream>
struct student
{int id;char name[43];
}
int main(void)
{student s1;
}
3.c++中所有变量和函数都必须有类型
- C语言接受没有返回类型的函数,接受单个形参传递多个实参的情况
#include<stdio.h>
f()//函数没有返回类型默认返回类型为整形,所以在C语言中不会报错
{return 10;
}
int g(int a)
{return 10;
}
int main()
{f();g(20,30,40,50);//C语言接受单个形参传递多个实参return 0;
}
4.c++中新增的bool类型
#include<iostream>
using namespace std;
int main()
{bool flag=true;flag = true;cout<<"flag(true)="<<flag<<endl;flag = false;cout<<"flag(false)="<<flag<<endl;flag=20;cout<<"flag="<<flag<<endl;return 0;
}
- bool类型的变量的值只有0和1两种
5.三目运算符的加强
- C语言中三目操作符不能当左值来使用
#include<stdio.h>
int main()
{int a=10;int b=20;int c=0;//左值 右值c=(a<b?a:b);printf("c=%d\n",c);(a<b?a:b)=50;//C语言中三目运算符不能当左值//10//10=50;return 0;
}
- c++中三目操作符可以当左值来使用
6.const的增强
int const b; //代表一个常整形数
const int* c;//c是一个指向常整型数的指针(所指向的内存数据不能被修改,但本身可以修改)
int* const d;//常指针(指针变量不能被修改,但是他所指向的空间可以被修改)
const int* const e;//一个指向常整形的常指针(指针和它所在的内存空间,均不能被修改)
- C语言中const修饰的变量并不能改变成为常量
#include<stdio.h>
int main()
{const int a=10;int* p=&a;*p=70;return 0;
}
最后a会改变成为70,说明被const修饰的a并没有成为常量
- c++中const修饰的变量就算通过指针也不会被改变
#include<iostream>
using namespace std;
int main()
{const int a=10;int* p=(int*)&a;*p=20;cout<<"a="<<endl;cout<<"*p="<<*p<<endl;return 0;
}
c++中const修饰的变量在赋值时并不是在栈区开辟空间,而是在符号表。
思考:常量可以取地址吗??
答:如果对一个常量取地址,编译器会临时开辟一个空间,让这个指针存放这个临时空间的地址
7.对枚举的增强
C语言中枚举本质就是整形,枚举变量可以用任意整形赋值。而c++中枚举变量,只能用枚举出来的元素初始化。
#include<iostream>
using namespace std;
enum season
{SPR,SUM,AUT,WIN,
};
int main(void)
{enum season s=SPR;//s=0 //err 但是C语言可以通过s=SUM;return 0;
}