Effective Modern C++(1.顶层const与底层const)
1.顶层const与底层const的定义
const修饰的变量不可以改变,那么他就是顶层const,如:
const int a = 10;
那么,对于
const int *const p = new int(10);
第二个const就是顶层const,因为他修饰的是p;第一个const是底层const,因为他修饰的不是p,而是p所指向的。
引用的const一定是底层const,如:
const int &a = 10;
2.注意事项
当执行对象拷贝操作时,常量的顶层const不受什么影响,底层const必须一致
例子:
#include <iostream>
#include <string>int main() {// part 1// 定义一个const变量,表示a不能被改变了const int a = 10;//令b = a,只拷贝了指,const属性并没有被拷贝int b = a;// part 2const int *const p = new int(10);int *p1 = p;int *const p2 = p;const int *p3 = p;// part 3int *p4 = &a;// part 4const int &r1 = 20;int &r2 = a;int &r3 = r1;return 0;
}
part 1
对于此代码第一部分,const int a = 10这句话其实和int a = 10是一样的,因为顶层const没有影响,可以忽略,因此可以直接执行拷贝操作,即int b = a;不会报错。
part 2
对于第二部分,首先定义了一个const int *const p = new int(10),由于顶层const可忽略,所以变成const int *p = new int(10);所以在第二行就会报错,报错信息为

就是因为int *p的类型不等于const int *p,同理,第三行也会报相同的错误,第四行才是正确的。
part 3
对于第三部分int *p3 = &a;乍一看,a的定义变成了int a = 10,那么这句话似乎是对的,但是当对a取地址时,&a变成了指向a的地址,那么他就变成了底层const,因此,代码应该修改为:const int *p3 = &a.

part 4
关于引用的const:
- 引用不是对象,不进行拷贝,不满足上面的原则(蓝字部分)
- 常量引用如果在左侧,右侧可以接任何东西
eg:
int &r1 = 40;会报错,因为a是一个引用,而引用是一个对象的别名,而40只是一个临时的数据,他不是一个对象,所以这句话是错误的;那么,如果代码改为const int &r1 = 40,这句话就不会报错

- 非常量引用 = 常量, 报错
eg:
首先对于代码int &r4 = a,这里的a是一个const常量,值为10,说明a不可以被改变, 而r4这个引用是a的别名,他的类型不是const,说明可以使用别名对a的值进行改变,所以会报错。

相关文章:
Effective Modern C++(1.顶层const与底层const)
1.顶层const与底层const的定义 const修饰的变量不可以改变,那么他就是顶层const,如: const int a 10; 那么,对于 const int *const p new int(10); 第二个const就是顶层const,因为他修饰的是p;第一个…...
mmsegmentation学习笔记
mmsegmentation教程 下载预训练权重 github–>mmsegmentation–>model zoo–>XXX model(如:PSPNet)–>找到预选连权重与config的前缀一致:pspnet_r50-d8_4xb2-40k_cityscapes-512x1024 (model) 了解配置文件 查看…...
RabbitMQ简易安装
一般来说安装 RabbitMQ 之前要安装 Erlang ,可以去Erlang官网下载。接着去RabbitMQ官网下载安装包,之后解压缩即可。 Erlang官方下载地址:Downloads - Erlang/OTP RabbitMQ官方下载地址:Downloading and Installing RabbitMQ —…...
Mac M1 安装Docker打包arm64的python项目的镜像包
1、首先安装Docker,到官网下载,选择apple chip版 Docker中文网 官网 2、双击下载的dmg文件,在弹出框中之间拖拽到右边 3、打开docker,修改国内镜像源,位置在配置-DockerEngine "registry-mirrors": ["…...
『OPEN3D』1.8 点云的配准理论
点云的配准是将不同的3D点云对齐成一个完成的点云模型;配准的目标是找到两帧点云之间的相对旋转(rotation)与平移(translation),使得两份点云中有重叠的区域能够完好拼接。 点云配准示例图(来自…...
Python数据结构
目录 5.1. 列表详解 5.1.1. 用列表实现堆栈 5.1.2. 用列表实现队列 5.1.3. 列表推导式 5.1.4. 嵌套的列表推导式 5.2. del 语句 5.3. 元组和序列 5.4. 集合 5.5. 字典 5.6. 循环的技巧 5.7. 深入条件控制 5.8. 序列和其他类型的比较 本章深入讲解之前学过的一些内容…...
突发!新华三总裁《致全体员工的一封信》,中高层全面降薪10%-20%!
* 你好,我是前端队长,在职场,玩副业,文末有福利! 精彩回顾:进了央企,拿了户口,却感觉被困住了。 11月23号,某社交平台爆出了新华三总裁于英涛的《致全体员工的一封信》&a…...
QIIME 2介绍
QIIME 2(Quantitative Insights Into Microbial Ecology 2)是一个用于分析和解释微生物组数据的开源生物信息学工具。它是QIIME的第二个版本,经过重新设计以提高灵活性、可扩展性和可重复性。 1. 关于QIIME 2的一些重要特征和概念࿱…...
Spring Cloud Gateway 的简单介绍和基本使用
前言 本文主要对Spring Cloud Gateway进行简单的概念介绍,并通过多模块编程的方式进行一个简单的实操。 文章目录 前言1 什么是网关(概念)2 微服务中的网关2.1 问题12.2 问题2 3 网关作用4 Spring Cloud Gateway组成5 Spring Cloud Gateway基…...
Leaflet结合Echarts实现迁徙图
效果图如下: <!DOCTYPE html> <html><head><title>Leaflet结合Echarts4实现迁徙图</title><meta charset"utf-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0">…...
在mysql存储过程中间部分,使用游标遍历动态结果集(游标动态传参使用)
mysql游标动态传参实现(动态游标) 1.问题2.需求描述3.实现3.1.使用3.2.代码(直接看这都可以) 1.问题 众所周知,mysql存储过程功能是没有oracle的包功能强大的,但是在去O的趋势下,mysql存储过程的…...
全球SAR卫星大盘点与回波数据处理专栏目录
近年来,随着商业航天的蓬勃发展,商业SAR卫星星座成为美欧等主要航天国家的发展重点,目前已在全球范围内涌现出众多初创公司进军商业SAR领域,开始构建大规模商业微小SAR卫星星座,其所具有的创新服务能力将为传统的商业遥…...
C语言重点编程题——21-30
目录 21. 从键盘输入的10个整数中,找出第一个能被7整除的数。若找到,打印此数后退出循环;若未找到,打印"not exist" ★★★★22.有一个一维数组,内放10个学生成绩,写一个函数,求出平均分。 23.有N个学生,每个学生的信息包括学号、 性别、姓名、四门课的成绩…...
pip install 使用清华镜像源
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package 官方文档: pypi | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror...
VBA技术资料MF86:将PPT文件批量另存为PDF文件
我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到…...
taro h5 ios解决input不能自动获取焦点拉起键盘
描述:页面中有个按钮,点击跳转到第二个页面(有input),能直接获取焦点拉起键盘输入 安卓: 直接用focus() ios: focus无效,必须手动拉起 原理: 点击按钮的时候拉起一…...
「Docker」如何在苹果电脑上构建简单的Go云原生程序「MacOS」
介绍 使用Docker开发Golang云原生应用程序,使用Golang服务和Redis服务 注:写得很详细 为方便我的朋友可以看懂 环境部署 确保已经安装Go、docker等基础配置 官网下载链接直达:Docker官网下载 Go官网下载 操作步骤 第一步 创建一个…...
Vue环境的搭建
1.Vue开发的两种方式 (1)核心包传统开发模式 基于html/css/js文件,直接引入,开发Vue。 (2)工程化开发模式(更常用的一种): 主要是基于构建工具(例如,webp…...
在Spring Boot中实现单文件,多文件上传
这篇文章算是一篇水文,因为也没啥好讲的,在Spring Boot中,上传文件是我们常常做的,包括我们在实际开发过程中,我们也经常碰到与文件上传有关的功能,这也算是我们常用的一个功能了,毕竟作为开发者…...
如何在 Web 应用程序中查找端点?
如何在 Web 应用程序中查找端点? 这篇文章主要讲述了如何在网络应用中找到端点。以下是文章的主要要点: 端点是网络服务的访问地址,通过引用这个URL,客户可以访问服务提供的操作。端点提供了寻址Web服务端点所需的信息。 HTTP消息是服务器和客户端之间交换数据的方式,包…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
【C++】纯虚函数类外可以写实现吗?
1. 答案 先说答案,可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...
