c c++ 中const volatile 的用法及默认转换表

本文详细介绍了C++中的默认类型转换规则,包括不同基本数据类型之间的转换路径,并深入探讨了const关键字在C和C++中的不同用法。此外,还讲解了const与指针及引用相结合时的安全性和类型转换规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.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.引用只能定义一级,不能出现二级 ...



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值