C++ const的自我理解

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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值