C++中关于const的说明

1. 核心

const的本质是恒值,恒定不变的。也就是说,期望值不发生变化,保持恒定,这里的值通常是变量的值,当然,对象也可以理解为一个特殊的变量,也可以为指针的值。

如果能理解上面的内容,剩下的就是语法和逻辑的问题,下面逐一介绍。

2. 语法

|----------|--------------|------------------------|---------------------------------|
| | 说明 | 语法 | 示例 |
| 常变量 | 定义一个常变量 | const 类型 变量名 | const int a; |
| 常函数 | 定义一个函数为常函数 | 类型 函数名() const | int fun() const |
| 常指针 | 定义一个指针为常指针 | 类型 * const 指针名 | int * const p; |
| 指向常量指针 | 定义一个指针,指向常量 | const 类型 *指针名 | const int *p;或者 int const *p; |
| 指向常量的常指针 | 定义一个常指针,指向常量 | const 类型 * const 指针命令 | const int * const p; |
| 常对象 | 定义一个对象为常对象 | const 类名 对象名 | const Time t1;或者 Time const t1 |
| 常对象指针 | 定义一个指针指向常对象 | const 类名 * 指针名 | const Time * pt1; |
| 对象常指针 | 定义一个常指针指向对象 | 类名 * const 指针名 | Time * const pt1; |
| 类常成员 | 定义一个类的常成员 | 同常变量定义 | |
| 类常函数 | 定义一个类的常函数 | 同常函数定义 | |
[const相关的语法]

3. 注意

3.1 const的位置

const 可以放在很多位置,但是需要注意的是,它一定是修饰离它最近的成分,典型的:

const int *p;表示的是指向常量的指针,这里的变量是常量,而指针是变量,换句话说:p=&a;p=&b;都是可以的,但是,*p=5,就会报语法错误;

int * const p;表示的是指向变量的常指针,这里的指针是常量,而其指向的变量是可变的,换句话说,p=&a;p=&b;语法会错误;,但是,*p=5,就是ok的。

3.2 常对象,常成员函数,常成员变量间关系

常对象,只能调用常成员函数,这是因为,非常成员函数,可以改变类的成员值,这与常对象的要求是不相符的,其它的根据const的定义来确定。

原理:

  • 常成员函数 (如 void display() const;)在内部被视为接受一个 const 类型的隐式指针 this

    • 对于非常成员函数,隐式指针是 Time* this

    • 对于常成员函数,隐式指针是 const Time* this

    • 根据指针的 const 规则(指向常量的指针 ),const Time* this 意味着你不能 通过 this 指针去修改它指向的对象(即该常对象)的任何数据。

  • 非常成员函数 (如 void setHour(int h);)接受的是一个const 类型的隐式指针 (Time* this)。

相关推荐
Highcharts.js2 小时前
缺失数据可视化图表开发实战|Highcharts创建人员出生统计面积图表示例
开发语言·前端·javascript·信息可视化·highcharts·图表开发
测试员周周6 小时前
【Appium 系列】第16节-WebView-H5上下文切换 — 混合应用的自动化难点
运维·开发语言·人工智能·功能测试·appium·自动化·测试用例
杜子不疼.9 小时前
【C++ AI 大模型接入 SDK】 - DeepSeek 模型接入(上)
开发语言·c++·chatgpt
加号39 小时前
【C#】 串口通信技术深度解析及实现
开发语言·c#
sycmancia9 小时前
Qt——编辑交互功能的实现
开发语言·qt
石山代码10 小时前
C++ 内存分区 堆区
java·开发语言·c++
无风听海10 小时前
C# 隐式转换深度解析
java·开发语言·c#
一只大袋鼠11 小时前
Git 进阶(二):分支管理、暂存栈、远程仓库与多人协作
java·开发语言·git
LuminousCPP11 小时前
数据结构 - 线性表第四篇:C 语言通讯录优化升级全记录(踩坑 + 思考)
c语言·开发语言·数据结构·经验分享·笔记·学习
web3.088899912 小时前
1688 图搜接口(item_search_img / 拍立淘) 接入方法
开发语言·python