C++中const关键字的常见用法【常成员变量/常成员函数/常引用/常量指针/指针常量/常量参数】

看下面这样一个例子,其中出现了9个const:

class MyClass
{1const int n;……【2const char * function(3const int & aa)4const{……}
} ;int main(void)
{5const MyClass c(10);6const char * p1;……int *7const p2 = &x;8const int a = 10;int9const b = 20;……
}

先说【4】和【5】,这两个是一对。【4】是代表“常成员函数”,是一个保证,保证不改变成员变量。【5】是代表对象c是一个常对象,常对象就像常变量一样,必须被初始化且只能在初始化时赋值,之后再也不允许修改其值。

常成员函数(即【4】)的主要特点:
1)不能更新类的成员变量
2)不能调用该类中没有用const修饰的成员函数,即只能调用常成员函数
3)可以被类中其它的成员函数调用
4)常对象(即【5】)只能调用常成员函数,而不能调用其他的成员函数。

补充:virtual int function() const = 0;中的const也是【4】,只不过这个是纯虚函数,没有函数体。=0代表纯虚函数。所以const和=0得分开看。

【3】在函数调用中是最常见的,连同&一起用,提高效率的同时保证了原本的实参不会被修改。

对于【2】,可见它修饰了函数的返回值。如果与指针一起用,例如const char * functionName(),代表返回的是常量指针;如果与引用一起用,例如const int & functionName() ,代表返回的是常引用

常量指针:const char * p
——该指针所指向的值是个定死的常量,不能被修改。在本例中【6】就是常量指针。

常引用: const int & a;
——不能通过常引用修改其引用的内容,但可通过其他方式修改被引用的内容 。

【7】是指针常量,顾名思义是一种常量,其值存的是一个地址,其值不可被更改。(但地址指向的那一块内存里的数据可以被更改,这是与【6】要辨析的地方。)

【8】和【9】是等价的,就是一个常量,代表a和b的值永远是这个,之后不能对a和b进行赋值操作。所以必须初始化。

【1】是常量成员变量,跟【8】【9】性质类似,必须被初始化,初始化后,不能够被修改。初始化有两种方式——
第一种:

class A
{const int n = 10; //ok,在类定义时
};

第二种:

class A
{const int n;A(int _n): n(_n) {} //ok,在初始化列表中
};

这样写编译错误:

class A
{const int n;A(int _n){n = _n; //编译错误,提示“必须是可以修改的左值”}
};

小结

本文提到了:【1】常量成员;【2】常量返回值;【3】常量参数;【4】常量成员函数;【5】常对象;【6】常量指针;【7】指针常量;【8】【9】常量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/685787.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu Desktop 显示文件路径

Ubuntu Desktop 显示文件路径 1. GUI hot key2. CLIReferences 1. GUI hot key Ctrl L: 显示文件路径 2. CLI right click -> Open in Terminal -> pwd strongforeverstrong:~/Desktop$ pwd /home/strong/DesktopReferences [1] Yongqiang Cheng, https://yongqiang…

(08)Hive——Join连接、谓词下推

前言 Hive-3.1.2版本支持6种join语法。分别是:inner join(内连接)、left join(左连接)、right join(右连接)、full outer join(全外连接)、left semi join(左…

C++ “雪花算法“原理

C雪花算法并不是传统的数据结构与算法而是一种崭新的分布式算法 属于深层次C 本篇文章就来描述一下雪花算法 什么是雪花算法: 雪花算法(Snowflake)是Twitter开源的一种分布式唯一ID生成算法。它可以在不依赖于数据库等其他存储设施的情况下&#xff0c…

Anaconda windows安装

1.推荐到清华源去下载windows.exe安装包 anaconda | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 2.创建新环境 conda create --name python38 python==3.8 3.激活新环境 conda activate python38 4.创建condarc文件 conda config --set show_ch…

【每日一题】06 排序链表

问题描述 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 求解 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* sortList(struct ListNode* head) {struct…

线性注意力机制全新升级!性能显著提高,速度、精度更优

线性注意力机制通过对传统注意力机制中的Softmax操作进行线性化处理,可以提高Transformer模型的并行性能、降低复杂度,在计算效率、模型表达能力等方面都具有优势。 作为一种常用有效的优化方法,线性注意力机制可以在保证模型性能的同时提高…

C# CAD-Xdata数据 添加(一)

运行环境Visual Studio 2022 c# cad2016 一、XData(扩展数据)特定代码值 XData(扩展数据)特定代码值 XData通过一系列DXF组码(DxfCode)存储不同类型的数据,包括但不限于ASCII字符串、已注册应…

LevelDB源码阅读笔记(0、下载编译leveldb)

LevelDB源码阅读笔记(0、下载编译leveldb) LeveDB源码笔记系列: LevelDB源码阅读笔记(0、下载编译leveldb) 本博客环境如下 [rootlocalhost build]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core…

qt 开发 “控件之家“

本篇文章我们来描述一下Qt 控件 是qt中最基本 也是最难缠的 有种“小鬼难缠的感觉” qt常用控件大集合 Qt是一个广泛使用的跨平台应用程序框架,它提供了许多用于构建图形用户界面(GUI)的控件。以下是一些Qt中常用的控件: QPushButton:这是…

【Qt笔记】QSS中常见的伪状态

QSS中常见的伪状态 伪状态描述:active当组件处于一个活动的窗口时,此状态为真:adjoins-itemQTreeView::brance与一个条目相邻时,此状态为真::alternate当QAbstractItemView的alternatingRowColors属性为true,绘制交替的行时此状态为真:bottom组件处于底…

软考 系统分析师系列知识点之信息系统战略规划方法(12)

接前一篇文章:软考 系统分析师系列知识点之信息系统战略规划方法(11) 所属章节: 第7章. 企业信息化战略与实施 第4节. 信息系统战略规划方法 7.4.8 战略一致性模型 信息化战略接受企业战略的指导,企业战略需要信息化…

链表总结 -- 《数据结构》-- c/c++

链表的概念 链表是一种物理存储结构上非连续存储结构,数据元素的逻辑顺序是通过链表中的引用链接次序实现的 。 链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的…

适用于Android 的 7 大短信恢复应用程序

对于 Android 用户来说,丢失重要的短信可能是一种令人沮丧的体验。幸运的是,有许多短信恢复应用程序可以帮助恢复丢失或删除的短信。在本文中,将与您分享 7 个最佳短信恢复应用程序,并帮助您找到可用于恢复已删除消息的最佳应用程…

【网工】华为设备命令学习(防火墙)

实验目的PC1连接到外网。 关于防火墙的其他知识后续补充。 ensp里的防火墙 用户名admin 密码Admin123 防火墙的接口类型 1.路由模式 物理口可以直接配. ​​​​​2.交换模式 物理口不能直接配IP,类似交换机,可以配vlan 首先我们先要对各个设备进…

【深度学习】S2 数学基础 P6 概率论

目录 基本概率论概率论公理随机变量 多个随机变量联合概率条件概率贝叶斯定理求和法则独立性 期望与方差小结 基本概率论 机器学习本质上,就是做出预测。而概率论提供了一种量化和表达不确定性水平的方法,可以帮助我们量化对某个结果的确定性程度。 在…

2.1.1 摄像头

摄像头 更多内容,请关注: github:https://github.com/gotonote/Autopilot-Notes.git 摄像头是目前自动驾驶车中应用和研究最广泛的传感器,其采集图像的过程最接近人类视觉系统。基于图像的物体检测和识别技术已经相当成熟&#…

【TC3xx芯片】TC3xx芯片SMU模块详解

目录 前言 正文 1.SMU功能概述 1.1 SMU架构 1.2 SMU_core 1.3 SMU_stdby 2. SMU功能详述 2.1 SMU_core 2.1.1 Reset类型 2.1.2 接口(Interfaces)概述 2.1.2.1 SMU_core到SCU的接口 2.1.2.2 SMU_core到IR的接口 2.1.2.3 SMU_core到Ports(Err…

5.8 BCC工具之mysqld_query.py解读

一,mysqld_query简介 我们首先来看USDT,USDT即Userland Statically Defined Tracing,它是一种静态定义的跟踪技术,用于在用户空间应用程序中添加自定义的跟踪点。USDT利用DTrace(动态跟踪)框架,允许开发者在代码中定义跟踪点,并在需要时启用它们。这样,开发人员可以在…

私立医院患者大数据分析平台建设方案

一、项目目标 1、数据质量,统计数字不仅是真实可信,而且要及时,便于及时判断企业经营情况,同时通过内外部数据的对标,发现企业经营问题。 2、提供指标的监控预警,为决策提供支持,减少杂乱无用报表的生产。 3、提升数据处理效率,提高报表的可用性,让数据标准化,提高…

英文论文(sci)解读复现【NO.18】基于DS-YOLOv8的目标检测方法用于遥感图像

此前出了目标检测算法改进专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读发表高水平学术期刊中的 SCI论文&a…