1. const修饰普通变量和指针
const修饰变量,一般有两种写法:
const TYPE value;
TYPE const value;
这两种写法在本质上是一样的。它的含义是:const修饰的类型为TYPE的变量value是不可变的。
对于一个非指针的类型TYPE,无论怎么写,都是一个含义,即value只不可变。
例如:
const int nValue; //nValue是const
int const nValue; // nValue是const
但是对于指针类型的TYPE,不同的写法会有不同情况,例如:
A. const char *pContent;
B. char * const pContent;
C. char const *pContent;
D. const char* const pContent;
对于前三种写法,我们可以换个方式,给其加上括号
A. const (char) *pContent;
B. (char*) const pContent;
C. (char) const *pContent;
这样就一目了然。根据对于const修饰非指针变量的规则,很明显,A=C.
- 对于A,C, const修饰的类型为char的变量*pContent为常量,因此,*pContent的内容为常量不可变.
- 对于B, 其实还有一种写法: const (char*) pContent;
含义为:const修饰的类型为char*的变量pContent为常量,因此,pContent指针本身为常量不可变.
- 对于D, 其实是A和B的混合体,表示指针本身和指针内容两者皆为常量不可变
总结:
(1) 指针本身是常量不可变
(char*) const pContent;
const (char*) pContent;
(2) 指针所指向的内容是常量不可变
const (char) *pContent;
(char) const *pContent;
(3) 两者都不可变
const char* const pContent;
2. const修饰函数参数
const修饰函数参数是它最广泛的一种用途,它表示函数体中不能修改参数的值(包括参数本身的值或者参数其中包含的值)。它可以很好
void function(const int Var); //传递过来的参数在函数内不可以改变(无意义,因为Var本身就是形参)
void function(const char* Var); //参数指针所指内容为常量不可变
void function(char* const Var); //参数指针本身为常量不可变(也无意义, 因为char* Var也是形参)
参数为引用,为了增加效率同时防止修改。
修饰引用参数时:
void function(const Class& Var);//引用参数在函数内不可以改变
void function(const TYPE& Var); //引用参数在函数内为常量不可变
3. const 修饰函数返回值
const修饰函数返回值其实用的并不是很多,它的含义和const修饰普通变量以及指针的含义基本相同。
(1) const int fun1() 这个其实无意义,因为参数返回本身就是赋值。
(2) const int * fun2()
调用时 const int *pValue = fun2();
我们可以把fun2()看作成一个变量,那么就是我们上面所说的1.(1)的写法,即指针内容不可变。
(3) int* const fun3()
调用时 int * const pValue = fun2();
我们可以把fun2()看作成一个变量,那么就是我们上面所说的1.(2)的写法,即指针本身不可变。
4. const修饰类对象/对象指针/对象引用
const修饰类对象表示该对象为常量对象,其中的任何成员都不能被修改。对于对象指针和对象引用也是一样。
const修饰的对象,该对象的任何非const成员函数都不能被调用,因为任何非const成员函数会有修改成员变量的企图。
例如:
class AAA
{
void func1();
void func2() const;
}
const AAA aObj;
aObj.func1(); ×
aObj.func2(); 正确
const AAA* aObj = new AAA();
aObj->func1(); ×
aObj->func2(); 正确
5. const修饰成员变量
const修饰类的成员函数,表示成员常量,不能被修改,同时它只能在初始化列表中赋值。
class A
{
…
const int nValue; //成员常量不能被修改
…
A(int x): nValue(x) {}; //只能在初始化列表中赋值
}
6. const修饰成员函数
const修饰类的成员函数,则该成员函数不能修改类中任何非const成员函数。一般写在函数的最后来修饰。
class A
{
…
void function()const; //常成员函数, 它不改变对象的成员变量. 也不能调用类中任何非const成员函数。
}
对于const类对象/指针/引用,只能调用类的const成员函数,因此,const修饰成员函数的最重要作用就是限制对于const对象的使用。
7. const常量与define宏定义的区别
(1) 编译器处理方式不同
define宏是在预处理阶段展开。
const常量是编译运行阶段使用。
(2) 类型和安全检查不同
define宏没有类型,不做任何类型检查,仅仅是展开。
const常量有具体的类型,在编译阶段会执行类型检查。
(3) 存储方式不同
define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。
const常量会在内存中分配(可以是堆中也可以是栈中)。
相关推荐
2024年上半年网络工程师下午真题及答案解析
位于MPLS域边缘、连接其他网络的LSR称为( 3 ),区域内部的LSR称为核心LSR(CoreLSR)IP报文进入MPLS网络时,MPLS入口设备分析IP报文的内容并为其添加合适的标签,所有MPLS网络中的LSR根据标签转发数据,当该IP报文离开MPLS网络时,标签由出口LER弹出。LSP的出口LER称为( 6 )。某高校网络拓扑如下图所示,两校区核心(CORE-1、CORE-2),出口防火墙(NGFW-1、NGFW-2)通过校区间光缆互联,配置OSPF实现全校路由收敛,两校区相距40km。
C++ const的用法详解
const在C/C++中是十分重要的,如果单纯理解为“常量”那么你的格局就小了,今天在这里给大家介绍一下const在C++中具体详细的用法。
大模型训练显存瘦身全记录:从ZeRO-3参数分区到CPU Offload的硬件协奏曲
本文详细解析了如何通过ZeRO-3参数分区与CPU/NVMe卸载技术优化大模型训练的显存使用。结合bf16混合精度与梯度累积等策略,实现在消费级GPU上高效训练百亿参数模型,显著提升硬件利用率与训练效率。
C语言 基础知识之const(const是什么,const的作用,const的使用)
一、const是什么 const是C/C++中的类型修饰符。 二、const的作用 1、对变量声明只读特性,保护变量值以防被修改 2、节省空间,避免不必要的内存分配。const修饰的变量在程序运行过程中只有一份拷贝 3、提高程序运行效率。编译器不为普通const常量分配存储空间,而是将他们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储和读取内存的操作。 三、const的使用 1、const和普通变量 (1)编译器在编译过程中把...
避开地图定位的坑:手把手教你处理GCJ-02和WGS-84坐标转换(2023最新版)
本文深入解析了GCJ-02与WGS-84坐标系转换的核心原理与常见误区,提供了详细的代码实现与精度控制方法。针对地图定位开发中的实际痛点,文章重点阐述了如何通过迭代逼近法实现高精度坐标转换,并给出了误差测试与业务场景下的工程实践指南,帮助开发者有效规避定位漂移等问题。
告别手绘!用Aseprite+Unity Tilemap,从AI生成到2D游戏地图的保姆级搭建流程
本文详细介绍了如何利用Aseprite和Unity Tilemap从AI生成素材到搭建2D游戏地图的完整流程。涵盖AI生成素材的预处理、图层管理、动画制作,以及Unity中的Tilemap系统配置和性能优化技巧,帮助开发者高效创建像素风游戏地图。
Cpp关键字破解(一)【const】篇
const关键字总结 文章目录const关键字总结是什么初始化怎么用核心思想const引用指向const对象的指针&const指针多文件顶层const概念 是什么 以const(即单词constant)创建的变量的值不能改变,因为值不能修改,可以理解为常量,但是不存在真正的常量,只是在const的作用域中,该变量才不能被修改,超过了这个const的作用域,有可能是可以修改。 注意:const仅表示不能改变,不表示具体的变量类型,按照从右向左的方式来理解变量的命名,首先要说明这是一个什么类型的变量,其
G.6 PaddleHub实战篇{ERNIE实现文新闻本分类、ERNIE3.0 实现序列标注}【四】
百度飞桨:ERNIE 3.0 、通用信息抽取 UIE、paddleNLP的安装使用[一]_汀、的博客-优快云博客PaddleHub--飞桨预训练模型应用工具{风格迁移模型、词法分析情感分析、Fine-tune API微调}【一】_汀、的博客-优快云博客 PaddleHub--{超参优化AutoDL Finetuner}【二】_汀、的博客-优快云博客PaddleHub实战篇{词法分析模型LAC、情感分类ERNIE Tiny}训练、部署【三】_汀、的博客-优快云博客通过前面几篇文章大家都有一定了解,下面
C++中const、volatile、mutable的用法
const修饰普通变量和指针 const修饰变量,一般有两种写法: const TYPE value; TYPE const value; 这两种写法在本质上是一样的。它的含义是:const修饰的类型为TYPE的变量value是不可变的。对于一个非指针的类型TYPE,无论怎么写,都是一个含义,即value值不可变。例如: const int nValue; //nValue是const int const nValue; //nValue是const 但是对于指针类型的TYPE,...
第3版•系统集成项目管理工程师(中级) │ 告别迷茫!案例分析高分攻略
🥏第3版•系统集成项目管理工程师(中级) │ 告别迷茫!案例分析高分攻略
insightface scrfd人脸检测测试
pip install mmdet 自动安装mmcv win10上可以,服务器上没成功
转换成const_细谈c++的const
C++const 关键字小结const 是constant的缩写,本意是不变的,不易改变的意思。const 在C++中是用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数。1、C语言的const特点 const int a = 10;//不要把a看成常量 //a的本质 是变量 只是 只读变量c语言的const修饰全局变量 默认是(外部链接的)fun.c //c语言的co...
Qemu开发ARM篇-5、buildroot制作根文件系统并挂载启动
在上一篇中,我们编译了kernel,并在qemu上进行了运行,但到最后,在挂载根文件系统时候,挂载失败,这是因为我们还没有根文件系统,在本章中,我们将制作根文件系统。rootfs制作方式有很多方式,如busyBoxbuildrootYocto等,在该篇章中,我们使用buildroot来制作根文件系统,主要考虑到busyBox制作完还需要手动首改一些启动配置比较繁琐,而Yocto如果电脑配置不是很好,编译时间过长,比较麻烦。
C++——const详解
指针常量(顶层const): 本质是一个常量的指针,指针指向的地址不能改变,该地址存储的数据可以改变。常量指针(底层const): 指向常量的指针,,a是一个常量,p指向a的地址空间,a的值不能变,p的指向可以改变。更一般的,顶层const可以表示任意的对象是常量,对任何数据类型都适用,比如int、类、指针。 比较特殊的是:指针既可以是顶层const也可以是底层const,和其他类型有明显区别;const修饰变量主要有两个作用: 1、将变量定义为常量,保护被修饰的东西,防止意外的修改,增强程序的健壮性。co
精雕软件(JDpaint) 5.5 绿色版
精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版
Devexpress16.2.6破解工具
Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具
C++中 const的用法
const”在C++中用来修饰一个变量变为常量,本篇文章我们来介绍一下const的具体用法。
温度PID控制PLC程序
温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值
【CPP】const放在不同位置的作用
const & constexpr
C++函数前后加const的区别
1、函数前后const 函数前const:普通函数或成员函数(非静态成员函数)前均可加const修饰,表示函数的返回值为const,不可修改。格式为: const returnType functionName(param list) 函数后加const:只有类的非静态成员函数后可以加const修饰,表示该类的this指针为const类型,不能改变类的成员变量的值,即成员变量为read only...
cpp const的作用
小Q在周末的时候和他的小伙伴来到大城市逛街,一条步行街上有很多高楼,共有n座高楼排成一行。 小Q从第一栋一直走到了最后一栋,小Q从来都没有见到这么多的楼,所以他想知道他在每栋楼的位置处能看到多少栋楼呢?(当前面的楼的高度大于等于后面的楼时,后面的楼将被挡住) 输入描述: 输入第一行将包含一个数字n,代表楼的栋数,接下来的一行将包含n个数字wi(1<=i<=n),代表每一栋楼的高度。 1...
关于C++ const 的全面总结
C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。一、Const作用 如下表所示:No.作用说明参
c++ const 全面总结!
C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。 Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。一、Const作用 如下表所示: 二、Const的使用 1、定义常量 (1)const修饰变量,以下两
C、CPP的const
C和C++的const的区别本质上,C++的const为一个常量,所以可以初始化数组。而C的const为一个伪常量不可以初始化数组。 C: #include <stdio.h> void main() { const int num = 5;//C语言的const属于伪常量 int a[num];//所以此处报错 } CPP: #include <iostre...
C++ 顶层 const 和底层 const
本文详细解析了C++中const限定符的两种用法:顶层const和底层const。顶层const表示对象本身不可修改,底层const表示指针/引用指向的对象不可修改。
C++中const的使用
/ 推荐使用大写命名。
C/C++中的const
如果是 const 在 * 之前,如 const int *p ,表示指针 p 所指向的内容是常量,不能通过 p 来修改它指向的内容,但 p 本身可以指向其他地址;如果 const 在 * 之后,如 int * const p ,则表示指针 p 本身是常量,不能再指向其他地址,但可以通过 p 修改它指向的内容;- 在类中, const 成员函数是一个重要的概念。4).如果两个函数名相同,参数相同,但是一个是常函数一个是非常函数,那么这两个函数为函数重载,非常对象优先调用非常函数,常对象只能调用常函数。
【C++】const 限定符
对C++当中的const类型部分的内容进行学习和整理,主要的参考资料是第五版C++ Primer的第2.4节。
C++的const
在C++编程中,`const`关键字是保证程序安全性和稳定性的重要工具。它可以用来定义不可修改的变量、限定指针行为,甚至控制类成员函数的权限。通过合理使用`const`,开发者可以避免不必要的数据修改,提升代码的可读性和维护性。本文将深入探讨`const`在C++中的各种应用场景,帮助你充分理解并掌握这一关键特性。
2475



被折叠的 条评论
为什么被折叠?



