- 类型检查的区别
- 枚举的区别
- 左值也可被赋值
1、类型检查更严格
//c++类型检查比c语言更加严格
int main()
{
//****************1*****************
const int a; //c++中必须初始化
int *p = &a; //&a == const int *
*p = 110; //在c语言中可以用指针来修改const int的值
//****************2*****************
char *p = malloc(100); //c语法
char *p = (char *)malloc(100); //c++语法
return 0;
}
同样的代码在c语法中就能编译通过,但是在c++中就会报错。
1.1const int a在c++中就必须要初始化,不然就报错,但是在c语言中就能编译通过,而且是个随机值。
1.2上列中的 int p = &a在c++中编译不会通过,原因是变量a是const int类型,那么取地址就为const int 类型,把一个const int 类型赋值给int 在c++语法中是通不过的,但是c语言就可以通过,而且可以用该指针间接的修改const int a的值,这是c语言的一种缺陷。
1.3我们都知道mallo(100)返回的是void ,在c++语法中建议俩个类型相同才赋值,所以char *p == void 在c++语法中应先把void 强转为char ,注:基础类型可以相互转化如int ,double, float。
2、枚举的区别
eume BOOL
{
FALSE, TRUE
};
int main()
{
bool b = false; //c++中的布尔类型的本质是枚举类型
b = 100;b = 10.9;b=-10; //c++中的布尔类型可以赋非0值为真
//BOOL a = 100 //在c++中错误
}
2.1在c++中枚举只可以赋值你枚举的那些值,不可以赋值其他的,否则报错,但是c语言的枚举可以.
2.2在c++的语法中不必须使用 enum、struct等前缀,但是在c语言中就必须要使用前缀来声明,如:enum BOOL a。
enum
{
OFF,ON
};
//上面的枚举等价于 #define OFF 0
// #define ON 1
enum WEEK
{
Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
}
int main
{
//***************1**********************
WEEK week; //未初始化,所以是随机值
//week = 100 //错误
week = Monday //正确
//***************2**********************
int a = OFF;
if (a == ON)
......//开灯
else
......//关灯
return 0;
}
3.1定义枚举变量不能赋予枚举值以外的值。如:WEEK week = 100; 但是在c语言中不会报错。
3.2用枚举来代替宏,所以c++中建议用枚举或者用const来代替宏.
3、c++表达式也可以做左值
int main()
{
int a,b;
(a = b) = 100 //在c语言中不能通过,但是在c++中可以通过
(a !=b ? a : b) = 1000; //在c语言中不能通过,但是在c++中可以通过
return 0;
//c语言中可以拿表达式赋值给别人,但是表达式不可以赋值
}
4.1在c++中表达式可以做左值,主要是运算符重载机制,具体的我们在运算符重载去分析