C++学习笔记–const

const 是 constant 的缩写,本意是不变的,不易改变的意思。在 C++ 中是用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数。

C++ const 允许指定一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器某值是保持不变的。如果在编程中确实有某个值保持不变,就应该明确使用const,这样可以获得编译器的帮助。

引用菜鸟教程

常变量

const 类型名 变量名 = 初始化值;
必须要初始化
并且const定义的变量的值不能变,如图所示,编译器会报错不能运行

如果用一个指针变量(int *p)指向(const int a)
会报错

我们用强制转换试一下
发现 *p 指向的内存的值被修改
但是a的值不变

设一个断点调试一下
初始a = 20, *p = 20

*p = 10之后, a = 10, *p = 10
但是输出 a 是20
因为const,编译器认为a就是20

让 b = *p; 结果b = 10

再让b = a; 结果b = 20

编译器认为a = 20; 但是调试的时候显示 a = 10, 因为之前用 *p 修改了

常指针

常指针有三种
1. const 类型名 * 变量名 = 初始化值;
或者 类型名 const * 变量名 = 初始化值;
指向的变量的值不能修改,可以修改指向的变量

2. 类型名 * const 变量名 = 初始化值;
指向的变量不能修改,但是可以修改指向的变量的值,类似于引用

3. const 类型名 * const 变量名 = 初始化值;
指向的变量还有指向的变量的值都不能修改


const 类型名 * 变量名 = 初始化值;
或者 类型名 const * 变量名 = 初始化值;
指向的变量的值不能修改,可以修改指向的变量

如果修改指向的变量的值会提示错误

但是可以修改指向的变量

const 在 * 号左边,左定值


类型名 * const 变量名 = 初始化值;
指向的变量不能修改,但是可以修改指向的变量的值,类似于引用

如果修改指向的变量会报错

可以修改指向的变量的值

const 在 * 号右边,右定向


const 类型名 * const 变量名 = 初始化值;
指向的变量还有指向的变量的值都不能修改
两种的结合

指向的变量的值不能修改

指向的变量不能修改

综上所述:
const 在 * 号左边定值(指向的变量的值不能修改)
const 在 * 号右边定向(指向的变量不能修改)

常引用

const 类型名 &变量名 = 初始化值;

定义的常引用变量不能修改原变量的值

普通引用变量可以修改原变量的值

常数组

const 类型名 数组名[N][M]… = 初始化值;
数组元素的值不能修改
通过指针也不能修改
必须初始化

C++ 与 C 中 const的区别

C++ 中: const 正常情况下是看成编译期的常量,编译器并不为 const 分配空间,只是在编译的时候将期值保存在名字表中,并在适当的时候折合在代码中。
C 中: const是一个不能被改变的普通变量,编译器不知道编译时的值。

例如 C++ 中可以:

    const int N = 10;
int a[N] = {1, 2, 3};


C语言中则报错

const 与 #define

区别: C++中定义常量的时候不建议采用define,因为define只
做简单的宏替换,并不提供类型检查;

const不能代替#define,#define中还有许多其他功能是const所不能完成的。

最新文章

  1. nginx负载均衡集群
  2. RobotFrameWork(五)控制流之if语句——Run Keyword If
  3. 读书笔记-JVM
  4. java第五课:方法
  5. Linux---More命令 初级实现
  6. 输出图像到文件 imwrite()[OpenCV 笔记7]
  7. Python操作 Memcache、Redis、RabbitMQ、SQLAlchemy
  8. UVA 100 - The 3n+1 problem (3n+1 问题)
  9. struts2笔记02-action和Action类
  10. swift 关于 toolbar 学习笔记
  11. 第三章(jQuery中的DOM操作)
  12. 分享一款简单好用的HTML拼接工具
  13. 流畅python学习笔记:第十七章:并发处理
  14. python爬虫(五)_urllib2:Get请求和Post请求
  15. mysql 使用Navicat Lite如何打开‘查询编辑器’,使用sql语句对表进行操作!
  16. php模拟数据请求
  17. shiro 单点登录原理 实例
  18. LeetCode 985 Sum of Even Numbers After Queries 解题报告
  19. 修改.net core 运行端口
  20. 对不队——Alpha冲刺

热门文章

  1. Archery安装教程
  2. sql ROW_NUMBER() 排序函数
  3. day70:Vue:Git&路飞学城页面效果
  4. HashMap的理解
  5. swagger使用随笔
  6. 使用TLSharp进行Telegram中遭遇循环体内报session.dat文件被占用时解决方式一例
  7. 最全Python基础知识点梳理
  8. apktool的下载,安装,反编译和重新打包
  9. Pytorch可视化指定层(Udacity)
  10. E. Enemy is weak 解析(思維、離散化、BIT、線段樹)