一.C C++ 编译器默认类型的转换表
double <= float
|
unsigned
|
long
|
int <= short char (signed unsigned)
横向箭头:无条件转换
纵向箭头:从下向上进行转化
二.const
Const 修饰一个变量,表示该变量从此以后,不能再作左值。
C语言的const
1 .不一定要初始化
2.const修饰的变量 ,叫长变量,不能叫常量
3.不能当常量来使用,比如说来定义数组的大小
4.常变量的编译方式和普通变量没有区别
C++ 的const
1 .一定要初始化
2.const修饰的变量 ,叫常量
3.能当常量来使用,比如说来定义数组的大小
4.常变量的编译方式和普通变量有区别,在编译的过程中,把常量替换成常量的值
5.如果初始值是一个变量,此时C++的常量和C语言中的常量等价
三,const 和一级指针的结合保证const的安全:代码上,不能直接或间接修改常量值
直接:让常量作为左值
间接:泄露了内存的地址或者引用;
不能泄露给一个普通的指针和普通的变量引用
类型转换的问题:
const int * => int * 错
int * =>const int * 对
二级指针
int** => int *const*; 正确的类型转换
int *const*=>int ** 正确的类型转换
要么都有const ,要么都没有
int** => const int** 错
const int ** =>int ** 错
volatile :包含两层含义
解决了多线程缓存内存可见性问题和指令
1.保证多线程在执行的过程中,对线程共享变量不进行线程缓存
2.编译器不能对volatile 修饰的变量进行指令顺序的调整
在我们编译器会对我们的代码进行一些代码的优化
四.引用及const和引用的结合
1引用更安全的指针
&左边有类型 叫引用,没有叫取地址
1.定义变量时,名字左边有&符号,就是定义了一个引用变量
2.引用必须初始化
3.引用定义时,引用了哪块内存,就永远不能在改变了,不能再引用其他内存
4.引用只能定义一级,不能出现二级 ...