关键字const

C++之const关键字 const作用 const关键字在C++中真是无处不在,无论是函数参数,还是函数返回值,还是函数末尾都经常会看到const关键字,这表明C++中的const关键字是非常灵活的, 合理地使用const关键字能大大提高我们程序的健壮性。 被const修饰的即表明是常量性的、只读性的,不可随意修改的。因为const对象一旦创建后其值就不能再改变,所以const对象必须初始化。 const在C和C++中的区别 虽然在C中const也表示不可修改的意思,但是它的校验却没有C++中那么严格,比如在C中被const修改的 阅读详情

单纯的const……..

 

const:限定一个变量不允许被改变。

因为常量在定以后就不能被修改,所以定义时必须初始化——《C++ Primer》。(不过对于类定义体中的视情况而定)

然而,const后面的变量依然是变量,不是常量,在内存中还是有开辟存储空间的,从本质上讲,是可以被重新赋值的,只是编译器在编译的时候会检测,不让你重新赋值。但是如果你的变量名更改之后(如强制类型转换),编译器是无法自动识别的,此时就可以改变变量的值了。

 

1 常变量&常数组

Eg1:

const int n= 5;int a[n];

在C语言中,const修饰成制度变量,C++中修饰成常量。

因此,在ANSI C的编译器中会报错,因为ANSIC语言中,数组的维度是个常量,const定义的是只读变量,但终究是个变量,enum类型和#define宏可以定义常量。但是在标准C++中,这种写法是对的。(数组的维度必须用大于等于1的常量表达式定义。此常量表达式只能包含整型字面值常量、枚举常量或者用常量表达式初始化的整型const对象——《C++ Primer》)。

 

Eg2:

#include<stdio.h>

int main()

{

const int a = 10;

*(int *)&a = 20;  //强制类型转换后,是可以通过编译的

printf(“%d, %x\n”, a, &a);

printf(“%d, %x\n”, *(int *)&a, (int *)&a);

return 0;

}

利用C语言编译器编译,运行结果:(注意.c与.cpp文件后缀在编译时的区别)

20,31F73C

20,31F73C

利用C++编译器编译,运行结果:

10,31F73C

20,31F73C

这里*(int *)&a = 20;确实将20放入了改地址中,但是C++编译器在编译代码时有一个代码优化的阶段,这里发生了常量折叠(常量折叠就是在编译器进行语法分析时,将常量表达式求值计算,并用求得的值来替换表达式,放入常量表)。const int a = 10;声明并定义之后,编译器就知道了a的值,以后每次再出现a时就用10来替换,而不是去相应的地方去取值。

总结来说,编译时10已经取代了a,因此运行时a地址里存放的值虽然已经变了,但a依然代表着10这个常量。

 

Eg3:

int main()

{

const int a[3] ={2, 3, 4};

int * p = (int *) a;  //偷梁换柱,和Eg2同一个道理

*p = 5;

printf(“%d\n”, a[0]);

printf(“%d\n”, a[0]);

}

注:C标准中,const定义的常量是全局的。

C++中,const变量是定义该对象的文件的局部变量,其他文件需要用extern显示的引用。即:

File_1.cpp

extern const int a = 1;

File_2.cpp

extern const int a;

2 常指针&指针常量&指向常量的指针常量&常引用

对于常变量、常数组、常对象、常引用,const与类型说明符或类名的位置可以互换,如const int a = 0;与int const a = 0;等同。然而const与指针或函数就要区分所放的位置了。

const只对它左边的东西起作用,如果左边没有东西,它才会对右边的东西起作用。根据这个规则来判断就会简单很多。

i 常量指针,表示这个指针是一个指向常量的指针(变量)。

const int *p;

int const *p;

p本身并不是const,在定义时不需要对它进行初始化。

注:

必须使用const void*类型的指针保存const对象的地址。不能用void*指针保存const对象的地址。

允许把非const对象的地址赋值给指向const对象的指针,但任何企图通过该指针修改其值的行为都会导致编译报错。

ii指针常量,指针本身不能修改,因此需要在定义时初始化。

int a;

int *const b =&a;

a的值是可以改变的。

这里增加一个知识点:引用。引用reference就是对象的另一个名字——《C++ Primer》。实际上,引用可以理解为一个指针常量。因此引用在定义时必须初始化,并且不能再将该引用绑定到别的对象上。

那么const引用是指向const对象的引用,也就是指向const对象的const指针。

iii指向常量的指针常量

const int a= 25;

const int *const b = &a;

Eg:

 

3 常对象&常成员函数

 

4 常函数

const用于函数时出现的三个位置:

const returnValfunction(const list_array) const;

第一个const的意思是:返回值是常量

第二个const的意思是:函数的过程中不能修改list_array的值

第三个const的意思是:函数过程不能隐式的修改function参数的值


参考多处资料,如有侵权,敬请告知,立马删除。谢谢

手把手教你解决CentOS sshd启动报错:从权限问题到目录缺失的全套解决方案 本文提供了一套完整的CentOS SSH服务启动故障排查与修复方案。针对sshd启动报错,从systemd日志分析、sshd -t配置测试入手,详细解决了私钥文件权限过宽(如0644错误)和权限分离目录缺失等典型问题,并附带了扩展排查清单,帮助运维人员系统性地定位和解决连接故障。 阅读详情

相关推荐

zedboard(5)spi轮询和中断

一个SPI可以有几个从设备 在程序中使用 s32 XSpiPs_SetSlaveSelect(XSpiPs *InstancePtr, u8 SlaveSel) 选择。其实就是吧对应设备的ss拉低。 备注:只选一个ss,可以不用指定。(感觉,还没测试) 这是xspips.c中定义的函数,发送和接收有 XSpiPs_Transfer 和 XSpiPs_PolledTransfer 两个函数,分别采用中断和轮询模式。    一、轮询模式 米联客参考代码,SpiPs_Init中部分和官方例程流程一样,Spi

Kiss丶小坏 5890

const 关键字详解

const关键字的使用 可以节省空间,避免不必要的内存分配,因为编译器通常不为const常量分配内存空间,而是将它保存在符号表中,这样就没有了存储于读内存的操作,使效率也得以提高; c语言中被const修饰的变量虽然不能直接修改,但是可以间接的通过指针修改,在c++中不能修改被cosnt修饰的变量。 C++编译器对const常量的处理当碰见常量声明时,在符号表中放入常量;编译过程中若发现使用常量则直接以符号表中的值替换。编译过程中若发现对const使用了extern或者&操作符,则给对应的常量分配存

little_rookie__的博客 1万+

小白快速上手 labelme:新手图像标注详解教程

本教程旨在帮助初次接触 labelme 的用户快速上手该软件,掌握基本操作与标注流程,为语义分割数据集做准备。

小白一枚~ 2万+

【const】const关键字

文章目录const修饰基本数据类型(int、double、float、char)const修饰数组const修饰指针变量const在函数传参中的作用const在函数返回值中的作用 const修饰基本数据类型(int、double、float、char) 被const修饰的变量为只读变量,不能修改,但可以在初始化时赋值。 #include <iostream> using namespa...

Eternally123的博客 271

【WB32库开发】第9章 TIM1高级定时器——输出多路PWM

PWM(Pulse Width Modulation)意为脉冲宽度调制,简称脉宽调制 。在工控行业,PWM信号可以用来调节电机转速、调节变频器以及BLDC电机驱动等;在LED照明行业,可以通过PWM来控制LED的亮暗变化;还可以通过PWM信号来控制无源蜂鸣器发出简单的声音等。 WB32也可输出PWM,需配置WB32上的定时器。 在WB32中有4个定时器,其中TIM1为高级定时器,TIMx(2-4)为通用定时器,这四个定时器均挂载在APB1总线上,每个定时器都可以输出4路PWM。 本章需要使用固件库TIM例程

北海村夫的博客 4637

c++2048小游戏编写

最近编写了一个小游戏,叫作2048,用到了面向对象的知识。

一个学生的博客 2372

const关键字总结

一.关于const关键字的思维导图 二:const的使用方法 1.定义const对象 const修饰符把对象修饰为常量,意思是接下来对象都被当成常量使用,不能被修改 在用const修饰的值不能更改一开始就要初始化 类中的const对象需要通过构造函数初始化定义 2.const对象默认为文件局部变量 在全局作用域声明的const变量是文件的局部变量,只能被当前文件使用,不能被其他文件访问。如果...

l477918269的博客 501

RouterOS v7.6实战:5分钟搞定IPv6双栈配置(含光猫桥接避坑指南)

本文详细解析了在RouterOS v7.6系统中配置IPv6双栈网络的实战步骤,特别针对家庭网络光猫桥接模式下的常见问题提供了避坑指南。文章涵盖了从基础配置到企业级部署的进阶内容,包括IPv6前缀获取、DHCPv6客户端设置、路由通告以及安全优化,帮助用户充分利用v7.6版本在IPv6支持上的改进与优势。

embedding5hiker的博客 1282

c++语言const是什么意思,c++中const关键字

c++中const关键字const是一个C++语言的限定符,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性。下面是小编分享的c++中const关键字,一起来看一下吧。define与const的区别1.define作用在预处理时,是简单地字符替换2. const作用在编译时,具有类型检查的功能3. const必须进行初始化常量指针与指针常量#include usi...

weixin_35284593的博客 5075

浪潮服务器ESXI6.7部署实战:手动集成RAID驱动避坑指南

本文详细介绍了在浪潮服务器上部署ESXI6.7时手动集成RAID驱动的完整流程和避坑指南。从驱动获取、解压技巧到封装实战,逐步解决国产服务器常见的驱动缺失问题,特别针对PM8060 RAID卡提供具体解决方案,帮助IT运维人员顺利完成ESXI部署。

weixin_33725722的博客 461

鱼眼双目测距实战:从OpenCV标定到SGBM匹配的完整流程解析

本文详细解析了鱼眼双目测距的完整流程,从OpenCV标定到SGBM匹配,涵盖标定、校正、匹配和测距四个关键阶段。通过实战经验分享,帮助开发者解决鱼眼镜头强畸变带来的测距挑战,提升测距精度至5%以内。特别适合机器人导航、自动驾驶和VR领域的开发者参考。

weixin_27298377的博客 124

【const关键字的作用】

一、const的定义 二、const使用原理 1、const+全局/局部变量 2、const修饰指针/引用 3、const修饰函数参数 4、const修饰函数返回值 5、const成员函数和数据成员 6、const修饰类对象 二、const与宏定义的区别 三、const与static的区别

Pumpkin_O的博客 3565

零基础基于U-Net网络实战眼底图像血管提取

文章目录1 前言2 血管提取任务概述3 U-Net架构简介4 眼底图像血管分割代码5 结果评估可视化(ROC曲线)6 改进U-Net网络完成眼底图像血管提取任务思路 1 前言 本文基于U-Net架构完成了视网膜血管的提取任务,基于Keras框架更简单的实现分割,网络、工具类、训练和预测的代码一目了然

NJU phd 在读。 5203

C/C++中const关键字的总结

const关键字在 C 和 C++ 中起着非常重要的作用,用于定义常量、修饰变量、函数参数、返回值、成员函数和类对象等。正确理解和使用const可以提高代码的安全性、可读性和效率。本文将详细介绍const的使用,包括全局和局部变量、修饰指针和引用、成员函数和数据成员、修饰类对象,以及const与宏定义和static的区别。const是一个限定符,用于限定一个变量或对象的值不可被修改。使用const可以防止无意间对数据的修改,提高程序的安全性和可靠性。只读属性:被const。

qq_74326574的博客 1714

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【c++】const关键字

const 是 C/C++ 中用于修饰变量或对象,使其在逻辑上不可修改的关键字。虽然看起来简单,但在不同场景下的行为差异很大,尤其是 C 和 C++ 中的差别更容易让人混淆。

2201_75930743的博客 982

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

const关键字

能加 const 就加 const,提高安全性和可读性。函数参数用 const 引用 传递对象,避免拷贝。类的 const 成员函数保证不会修改对象,增强代码健壮性。

qq_42045164的博客 386

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

C++之const关键字详解

const变量 它的值不能被改变,只读的变量。const对象一旦创建后其值就不能再改变,所以const对象必须初始化。初始值可以是任意复杂的表达式: const int bufSize = get_size(); //正确:运行时初始化 const int size = 42; //正确:运行时初始化 const int size; ...

janeqi1987的专栏 3501

聊聊C++关键字const

面试的时候被问到const关键字,我只说出了几条,没说全,感觉面试官很不满意,回去就恶补了一下,现在跟大家分享一下: (1)const变量和对象一旦定义就不能改变,故必须初始化 (2)默认状况下,const对象只在文件内有效。如果想在多个文件共享const对象就必须在变量定义前加extern关键字 (3)const的引用:把引用绑定到const上就像绑定到其他对象上一样,称之为对常量的引...

潇湘水云的博客 188

c++ const 关键字

在 C++ 中,const 是一个非常重要的关键字,用于声明常量或限制变量、函数参数、返回值等的修改。它的使用场景多样,语法也很灵活。下面我将详细讲解 const 的主要用法和语法规则,并配上简单的例子来说明。

2402_88047672的博客 1140

const关键字的简介

const关键字的简介 const在C语言中是一个关键字,它的作用是限定一个变量不允许被修改。当一个变量被const限定时,这个变量就是一个只读变量,编译器在内存中开辟一个地方来存放它的值,只过过这个变量由编译器限定不允许被修改。当一个变量被const修饰时虽然它的值不能被修改,但是它和常量是有区别的,常量是存放在内存中的只读区域,这就是常量不能被修改的原因。 下面我们来看看以下几个例子: 1. ...

有点慢的博客 3048

C++学习——const关键字

本节总结与const关键字相关的C++学习知识及面试题,一起来看看吧~

mingyuexin235的博客 1255

【C++札记】const关键字

C++中const关键字无处不在,我这里做下汇总,作为工具文章方便翻阅。 一:修饰数据成员 修饰的成员一单定义初始化后不能再进行修改,如: const int a = 10; a =20; //重新赋值直接会报错 当修饰类的成员函数时,先来段错误的代码 class Student { public: Student(int i) { thi...

码农code之路 339

static关键字和const关键字的作用

2. 指针和引⽤:声明指向常量的指针,表示指针所指向的值是常量,不能通过指针修改。声明常量引⽤,表示引⽤的值是常量,不能通过引⽤修改。3. 成员函数:⽤于声明常量成员函数,表示该函数不会修改对象的成员变量(对于成员变量是⾮静态的情况)。static void helper() { // 静态函数,仅在 file1.cpp 中可见。// 指向常量的指针。6. 常量指针参数:声明函数参数为指向常量的指针,表示函数不会通过指针修改传⼊的数据。5. 常引⽤参数:声明函数参数为常量引⽤,表示函数不会修改传⼊的参数。

himselfd的博客 602

c语言之const关键字

const关键字之前我也只是简单的认为它是定义一个不能修改的变量值,但是看书的话才发现远远不仅如此。 const定义一个只读变量 const修饰的变量是只读的,本质还是变量 const修饰的局部变量仍然是在栈上分配,可以通过指针修改其值(注意:在clang编译器上,用指针修改不会报错但是并不会修改其值,而在gcc上就会修改它的值) int main(int argc, char const *...

Yannie's Blog 1万+

《C++ const关键字》

const成员函数承诺在函数体内不会修改任何成员变量,而非const成员函数在函数体内可以修改成员变量,这就存在了逻辑上的矛盾:一个承诺不会修改成员变量的函数内正在调用一个可能修改成员变量的函数,这将违反const成员函数的承诺,因为编译器无法确定非const成员函数是否会修改对象的状态。非const对象可以被修改,而const成员函数承诺不会修改对象的任何成员变量,非const对象调用const成员函数,实际上是以一个更受限制的方式(即不修改对象状态)来访问对象的共能。

2202_75924820的博客 1691
上一篇: 关键字static
下一篇: C++构造函数小结
MonkeyFanfan
博客等级 码龄12年 15粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值