const修饰的成员函数

news2024/9/21 0:40:21

const修饰的成员函数

问题:

哪里出现编译报错了, 如何修改?

class A
{
public:
	const int get1() const
	{
		a1 = 10;
		return a1;
	}

private: 
	int a1 = 0;
};
int main()
{

	A a;
	a.get1();
	return 0;
}

当时以为是a是一个非const对象,调用了const成员函数导致编译错误的。然后修改方案是增加一个int get1(){}的非常量函数重载。

分析:

1. 对于非static成员函数,都有一个隐含的this指针

在这里插入图片描述

2. 对于const成员函数,该const修饰的实际是this指针

在这里插入图片描述

3. const修饰的成员函数内部,不能够对成员变量进行修改;const修饰的对象,状态在创建后不能被修改

在这里插入图片描述

4. 由于this指针与const关键字的作用

  • const成员函数内不能修改成员变量
  • const成员函数内,不能调用非const的函数

非const修饰的成员函数T* const this不能被const成员函的const T* const this进行赋值,权限放大了

  • 非const对象、成员函数可以调用const修饰的成员函数
T* const this;
const T* const this_arg = this;

将一个没有被const修饰的this指针的值赋值给一个被const修饰的this指针,权限可以缩小。

5. mutable关键字,用于修饰类的成员变量,提供绕过了常量性的限制的一种例外机制

class B
{
public:
	B(int val)
		:b1(val)
	{}

	void set(int val)
	{
		b1 = val;
	}

	void set(int val) const
	{
		b1 = val;
	}
public:
	mutable int b1;
};

int main()
{
	const B b(10);
	b.set(100);

	cout << ++b.b1 << endl;
	return 0;
}

在这里插入图片描述

6. const_cast()类型转换消除常属性

class B
{
public:
	int b1;
};

int main()
{
	const B b;

	B* b2 = const_cast<B*>(&b);
	B& b3 = const_cast<B&>(b);

	b2->b1 = 100;
	b3.b1 = 0;
	
	return 0;
}

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

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

相关文章

关于guacamole项目中的一点感悟与理解

关于guacamole项目中的一点想法 前言一、guacd模块启动相关二、一些感悟与理解参考 前言 Guacamole 是基于 Web 的 VNC 客户端&#xff0c;使用它可以通过web浏览器访问远程服务器终端并进行操作。它的基本架构如下图所示。 巧合之下&#xff0c;前段时间了解了项目中guacd模块…

构建大数据环境:Hadoop、MySQL、Hive、Scala和Spark的安装与配置

前言 在当今的数据驱动时代&#xff0c;构建一个强大的大数据环境对于企业和组织来说至关重要。本文将介绍如何安装和配置Hadoop、MySQL、Hive、Scala和Spark&#xff0c;以搭建一个完整的大数据环境。 简介 安装Hadoop 首先&#xff0c;从Apache Hadoop的官方网站下载所需的…

测试(一)

1.用户需求 可以简单理解为甲方提出的需求&#xff0c;如果没有甲方&#xff0c;那么就是终端用户使用产品时必须要完成的任务。该需求一般比较简略。 2.软件需求 或者叫功能需求&#xff0c;该需求会详细描述开发人员必须实现的软件功能(所谓的测试文档)。 大多数公司在进行…

05- c语言函数 (C语言)

一 函数的概念 1、在程序设计过程中&#xff0c;为了实现某个功能需要编写多行代码&#xff0c;例如求一个二维数组中的最大值&#xff0c;如果 该功能需要被多次使用&#xff0c;我们可以在每次使用时将原来的代码重复编写&#xff0c;但是这样未免有“凑代码”的嫌疑&#x…

大数据治理.数据储存技术

hive是基于Hadoop的一个数据仓库工具&#xff0c;用来进行数据提取、转化、加载&#xff0c;这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表&#xff0c;并提供SQL查询功能&#xff0c;能将SQL语句转…

Spark大数据处理学习笔记(3.8.3) Spark RDD典型案例-利用RDD实现分组排行榜

该文章主要为完成实训任务&#xff0c;详细实现过程及结果见【http://t.csdn.cn/Twpwe】 文章目录 一、任务目标二、准备工作2.1 在本地创建成绩文件2.2 将成绩文件上传到HDFS上指定目录 三、完成任务3.1 在Spark Shell里完成任务3.1.1 读取成绩文件得到RDD3.1.2 利用映射算子生…

Openfire身份认证绕过漏洞复现+利用(CVE-2023-32315)

0x01 产品简介 Openfire是免费的、开源的、基于可拓展通讯和表示协议(XMPP)、采用Java编程语言开发的实时协作服务器。Openfire安装和使用都非常简单&#xff0c;并利用Web进行管理。单台服务器甚至可支持上万并发用户。 0x02 漏洞概述 Openfire的管理控制台是一个基于 Web 的…

自然语言处理从入门到应用——动态词向量预训练:ELMo词向量

分类目录&#xff1a;《自然语言处理从入门到应用》总目录 在双向语言模型预训练完成后&#xff0c;模型的编码部分&#xff08;包括输入表示层以及多层堆叠LSTM&#xff09;便可以用来计算任意文本的动态词向量表示。最自然的做法是使用两个LSTM的最后一层隐含层输出作为词的动…

Qt项目网络聊天室设计

效果演示 网络聊天室 Qt网络聊天室服务端 网络聊天室程序 基于TCP的可靠连接(QTcpServer、QTcpSocket) 一个服务器&#xff0c;多个客户端 3. 服务器接收到某个客户端的请求以及发送信息&#xff0c;经服务器发给其它客户端 最终实现一个共享聊天内容的聊天室&#xff01; …

大数据治理.数据采集/归集技术

第一部分 阿里巴巴DATAx DataX 是阿里开源的一个异构数据源离线同步工具&#xff0c;致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。 DataX设计理念 DataX本身作为数据同步框架&#xff0c;将不同…

分布式系统消息通信技术:MOM与RPC

一、中间件 什么是中间件 中间件&#xff08;Middleware&#xff09;是处于操作系统和应用程序之间的软件&#xff0c;也有人认为它应该属于操作系统中的一部分。人们在使用中间件时&#xff0c;往往是一组中间件集成在一起&#xff0c;构成一个平台&#xff08;包括开发平台…

springboot配置 spring.profiles.active spring.profiles.include @profile

springboot配置 spring.profiles.active spring.profiles.include profile spring.profiles.active spring.profiles.include profile的命名方式 以 application-开头, --横杠(减号)不能少 application-{这部分自定义}.propertiesapplication-{这部分自定义}.ymlapplicatio…

c++多态详解

前言&#xff1a; 对于面向对象语言来说&#xff0c;多态是面向对象的三大特性之一&#xff0c;简单一点来说多态就是多种形态&#xff0c;是不同对象接收到同一种消息产生的不同动作或者反应&#xff0c;听起来有点抽象&#xff0c;实际上就是完成一个任务让不同的对象来做产生…

合宙Air724UG Cat.1模块硬件设计指南--模拟语音通道

模拟语音通道 简介 模拟音频技术是由传感器采集得到的连续变化的值&#xff0c;根据其电压的幅度用来展示声音强弱。CAT.1内置3种音频输出模式&#xff0c;分别为扬声器(SPK)输出&#xff0c;耳机(HP)输出和听筒(RECEIVER)输出。 特性 SPK接口 SPK-、SPK。Speaker差分信号接口…

记压测环境数据表死锁导致接口长时间pending问题

背景 压测过程中测试小伙伴反映某个页面长时间loading无法打开&#xff0c;接下来我们排查一下&#xff0c;既然是压测环境&#xff0c;那么就需要排除服务器资源层面的因素&#xff0c;现在考验的就是在系统资源不足时系统的情况&#xff0c;那么我们就直接从代码层面开始排查…

PADS-LAYOUT菜单及工具说明

目录 1 材料清单输出 2 元件属性检查 3 材料清单制作 4 原理图生成PDF 4.1PDF文件生成 4.2PDF文件查阅 4.3PDF文件打印 5 PADS转Altium Designer 5 Altium Designer转PADS 5.1 直接导入法 5.2 软件生成法 6 PADS层定义 7 设计规则输出 7.1 PADS对象管理 7.2 PAD…

pandas---分箱(离散化处理)、绘图、交叉表和透视表

1. 分箱 分箱操作就是将连续型数据离散化。分箱操作分为等距分箱和等频分箱. 1.1 等宽分箱 pandas.cut(x, bins, rightTrue, labelsNone, retbinsFalse, precision3, include_lowestFalse, duplicatesraise, orderedTrue) x&#xff1a;要分箱的一维数组或者 Series。 bi…

分布式系统概念和设计——分布式共享内存

分布式系统概念和设计 分布式共享内存 分布式共享内存是在不共享物理内存的计算机之间实现数据的共享的一个抽象。 有一个底层运行的系统保证其透明性&#xff0c;但是进程还是根据内存的分布处理物理内存的分布式能力 DMS最关键点&#xff1a; 不需要关心数据的通信&#xff…

百家号热议排名代发

百家号热议排名代发&#xff0c;百度排名怎么做&#xff0c;有什么技巧或者方式方法吗#百度首页关键词排名#百度推广#百度竞价推广#百度关键词排名#百度首页关键词排名方法# 其实百度推广并不赚钱&#xff0c;也没有你想象中的那么好做。 我说三点&#xff0c; 99% 的用户都遇…

C语言之动态内存分配讲解(2)

动态内存函数的介绍 在开始本章节之前&#xff0c;我们来复习一下动态内存分配&#xff08;1&#xff09;中所讲到的知识&#xff0c;看下面目录一和目录二 为什么存在动态内存分配 我们已经掌握的内存开辟方式有 int val 20;//在栈空间上开辟四个字节 char arr[10] {0};/…