1.C到C++类型增强
1.1 类型检查更严格
对于C
#include<stdio.h> int main(){ int const a = 10; //可以不赋初值,随机,编译通过 int *p = &a; //&const int * --> int *p = 100; printf("%d", a);//此时a会改为100 明修栈道,暗度陈仓 return 0; } //const int == int const //const int *p 不能改地址但能改内容 //const int const *p 都不能改
对于C++
#include<iostream> using namespace std; int main(){ const int a = 100; //不允许不赋初值 //int * p = &a; -->不允许 //C++ 不喜欢强制类型转换 return 0; }
1.2 布尔类型
C的逻辑真假是用 0 和 非0 来表示的,C++中有具体类型bool
bool flag = 100; // 非零等同于true
实际上是用枚举类型enum实现的
enum BOOL{ False, True }; BOOL flag = False;
printf("%d", sizeof(bool)); // 1B
1.3 真正的枚举
对于C
enum DAY{ Mon = 1, Tue, Men }; enum DAY today; //today = Men; //输出3 today = 100; //输出100,可以
对于C++
DAY today = 100; //不允许
enum{ Mon = 1, Tue, Men }; //等价于宏定义,能用枚举或const 尽量不用宏
1.4 表达式
对于C
int a, b = 10; a = b = 100; //100赋值给b,b=100表达式的值赋值给a (a = b) = 100; //不可以 表达式不可以被赋值
对于C++
int a, b = 10; (a = b) = 100; //形式上表达式可以被赋值 //输出a = 100, b = 10