【C++】const关键字的作用

const关键字的作用

修饰普通变量

cpp 复制代码
const int a = 10;

修饰普通变量,意味着该变量和常量一样不能被修改,但是该变量如果被其他指针所指向的话,可以通过指针去修改

修饰指针

那么就需要将指向该变量的指针也修饰为const

cpp 复制代码
const int a = 10;
const int* p = &a;//意味着指针p指向的变量不能被修改

但是需要让p指针一直指向a变量,那么就需要这样:

cpp 复制代码
int* const p = &a;//意味着p指针指向a这个动作不能改变

当然我们也可以既让p指向a不变,也让p指向a的值不能改变:

cpp 复制代码
const int* const p = &a;//意味着p指向a不变,也让p指向a的值不能改变

修饰数组

数组本身就是一个const的指针,其指向不能修改,也就是不能直接对数组变量进行赋值:

cpp 复制代码
int a[];
a = 10;//这个操作是错误的,因为a ----->  int* const a

但是可以对数组内部的元素进行const修饰

cpp 复制代码
const int a[];
//a ------> const int* const a

修饰函数形参

修饰普通形参,没多大意义

cpp 复制代码
void fun(const int a)//表示a这个形参不会发生改变

修饰指针形参,表示外部的变量不会被修改,保护了数据安全性

cpp 复制代码
void fun(const int* a)//表示在fun函数内不能通过a这个指针来修改外部实参

修饰引用形参,表示该引用不能在fun函数内被修改,也是为了保护数据的安全

cpp 复制代码
void fun(const Type& a)//引用作为参数,是将外部实参传递给引用形参,
//传递的是外部实参本身,提高了效率,为了保护数据,将引用形参设为const类型,保证在fun函数内不能修改该变量的值

修饰成员变量

意味着该成员变量不能被修改,那么只能在构造函数的初始化列表中赋值

修饰成员函数

意味着该成员函数是不能修改任何成员变量的值

const对象和const成员函数的关系

const对象不能调用非const成员函数,因为这样是权限的放大:const对象不能修改成员变量,但是调用了非const函数,可能会修改成员变量,编译器会报错

非const对象可以调用const函数,也可以调用非const函数,因为这样是权限的缩小:非const对象可能会修改成员变量,而const函数是不会修改成员变量的,这样编译器是允许的

相关推荐
疏狂难除8 分钟前
随便玩玩lldb (二)
开发语言·后端·rust
星轨初途15 分钟前
数据结构排序算法详解(5)——非比较函数:计数排序(鸽巢原理)及排序算法复杂度和稳定性分析
c语言·开发语言·数据结构·经验分享·笔记·算法·排序算法
b***653227 分钟前
GO 快速升级Go版本
开发语言·redis·golang
一点 内容1 小时前
深度解析OurBMC后端模式:全栈技术架构与运维实践
java·开发语言
f***01931 小时前
CC++链接数据库(MySQL)超级详细指南
c语言·数据库·c++
合方圆~小文1 小时前
球型摄像机作为现代监控系统的核心设备
java·数据库·c++·人工智能
Rust语言中文社区1 小时前
【Rust日报】 丰田“先锋”选择了 Rust
开发语言·后端·rust
邹小邹-AI1 小时前
Rust + 前端:下一个十年的“王炸组合”
开发语言·前端·rust
ECT-OS-JiuHuaShan1 小时前
否定之否定的辩证法,谁会不承认?但又有多少人说的透?
开发语言·人工智能·数学建模·生活·学习方法·量子计算·拓扑学
東雪木1 小时前
变量与数据类型
java·开发语言