当前位置:网站首页>指针常量和常量指针和类中的const
指针常量和常量指针和类中的const
2022-08-09 14:59:00 【why_so_hot】
指针常量和常量指针
指针常量
指针常量代表这个指针本身是一个常量,指向了一个变量后就无法再指向第二个变量了,声明方法:
int *const p = nullptr;
辨别技巧:观察 * 前后的部分即可,* 前说明这个指针指向一个什么类型,例如这个地方说明p是指向一个int类型,* 后是修饰指针本身的内容,例如这个地方const修饰p,说明p本身是一个常量,不可再进行多余的赋值,例如下面这段代码:
int main(){
int a = 1;
int b = 2;
int * const p = &a;
p = &b;
return 0;
}
p在声明时已经让其指向a(常量在声明时就必须进行赋值,不然后续进行赋值就违背了常量不可更改的原则,类里面的常量成员变量则需要在构造函数的初始化列表里面进行给值,放构造函数成员内部来赋值也会违背常量不可更改的原则)。这个时候再让p指向b,编译运行就会报错:
error: assignment of read-only variable 'p'
常量指针
先来一段代码实例:
int main() {
int a = 1;
const int *p = &a;
cout << *p << endl;
a = 2;
cout << *p << endl;
return 0;
}
按照前面介绍的辨别技巧很容易看出来p指向一个常量,因此使用间接寻址的方式去赋值会报错:
*p = 2;
error: assignment of read-only location '* p'
但是原变量本身进行修改是可以的,例如上面程序的运行结果为:
1
2
类当中的const
根据上面介绍的定义,其实很容易就可以想到类当中的this指针其实是一个指针常量,无法去修改this的指向,this永远指向自身
当成员函数被const修饰过后,变为常成员函数,常成员函数只可以访问到成员变量的值而不能直接去修改他们,因为类的封装性很多变量为private变量只能通过公有的read函数去读取,这些函数不涉及到修改,都可以声明为const,这样将更加安全
常成员函数其实const本身是修饰了this指针,让其变为一个常量指针,因此在常成员函数中没法去进行修改
常对象只能调用类中的常成员函数
边栏推荐
- opencv图像处理及视频处理基本操作
- SVM支持向量机——MATLAB在数学建模中的应用
- 用广搜和动态规划写个路径规划程序
- hugging face tutorial - Chinese translation - sharing custom model
- 【工具使用】Modsim32软件使用详解
- 【力扣】1154. 一年中的第几天
- hugging face tutorial - Chinese translation - fine-tuning a pre-trained model
- 蓝桥杯嵌入式第四届省赛做题笔记
- ASCII码表
- Introduction to common commands in SQLMap
猜你喜欢
随机推荐
Monte Carlo simulation
【力扣】516. 最长回文子序列
堆(heap)系列_0x05:一张图剖析堆块分配和FreeLists的联系
Vim实用技巧_6.复制和粘贴原理(寄存器)
堆(heap)系列_0x09:堆破坏示例(非法访问+未初始化+堆句柄不匹配)
【力扣】17. 电话号码的字母组合
opencv图像处理及视频处理基本操作
[Paper reading] LIME: Low-light Image Enhancement via Illumination Map Estimation (the most complete notes)
NiN(Network in Network) pytorch实现
【力扣】96. 不同的二叉搜索树
hugging face tutorial - Chinese translation - preprocessing
ASCII码表
Face recognition sample code analysis (1) - program parameter analysis
层次分析法(AHP)——MATLAB在数学建模中的应用(第2版)
相关性分析
深入浅出最优化(6) 最小二乘问题的特殊方法
【Postgraduate Work Weekly】(Week 12)
【力扣】75. 颜色分类
【更新中7/31】NTIRE 2022 ESR(efficient super-resolution) 方案与结果
时间序列分析