C++中关于自定义类型的一个特例:具有常属性的临时变量可以使用非const成员函数

news/2024/5/21 4:41:40

0. 前言


本节内容属于拓展,需要大家熟练掌握C++匿名对象,和临时变量的相关知识,再来学习。


1. 正文


1. 先来看一段代码:

int main()
{int(1)++;			// 报错,表达式必须是能修改的左值return 0;
}

我们都知道上面这段代码会报错,因为匿名对象int(1)本质上是一种临时变量,而临时变量是具有常属性的,所以不能被修改,不能执行++操作。

int是内置类型,如果我们换成自定义类型呢?

class Solution
{
public:Solution(int data = 0):_data(data){}Solution operator++(int){Solution temp(*this);_data++;return temp;}private:int _data;
};int main()
{Solution& s1 = Solution(0);			// 报错,权限提升const Solution& s2 = Solution(0);	// 不报错,权限平移return 0;
}

可以发现,自定义类型的临时对象也是有常属性的,如果要取到临时对象的引用,必须使用const,相当于给临时对象取一个名字,延长它的生命周期。目前为止,自定义类型的临时对象和内置类型临时对象属性完全相同。

2. C++对自定义类型临时变量的特殊处理:

class Solution
{
public:Solution(int data = 0):_data(data){}Solution operator++(int){Solution temp(*this);_data++;return temp;}private:int _data;
};int main()
{Solution(0)++;	// 不报错,具有常属性的临时变量可以使用非const成员函数return 0;
}

按理说,Solution(0)是一个临时对象,是具有常属性的,但是它却可以调用非const的成员函数,进而可以对这个临时对象内部的值进行修改,突破了常属性的限制。这里可以认为是C++对自定义类型做的一个特殊处理。



http://www.mrgr.cn/p/48516173

相关文章

金蝶Kis云代码实现

1、金蝶认证(获取到token)也就是code,获取业务接口网关和auth_data,请求头 RequestHeader类 package com.api.xic.jd.tool; import net.sf.json.JSONObject; import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import java.util.HashMap; import…

SD-WAN解决企业网络六大难题

随着企业网络的日益发展,各类挑战层出不穷。从数据复制的效率瓶颈到BYOD政策引发的安全隐患,现代企业急需高效解决方案来提升网络性能和安全性。在这样的背景下,软件定义广域网(SD-WAN)技术成为解决这些棘手问题的关键…

qt实现窗口B始终显示在窗口A上,且上层窗口在电脑任务栏不显示缩图

场景:窗口A上面始终显示窗口B(透明背景) /*****************************************/ 首先,在主窗口即底部窗口重写changeEvent QtGuiApplication1::QtGuiApplication1(QWidget *parent) : QWidget(parent) , m_pQtGuiClass(nullptr) {ui.setupUi(this);setWindowFlags(Q…

微信开发者工具请求接口 Provisional headers are shown

前情最近全权负责公司小程序项目的开发,使用的uniapp技术栈。 坑在和服务端联调的时候发现,接口pending很久,而且时不时的报Provisional headers are shown,而且出现的概率很大方法尝试?有可能是浏览器插件拦截了,把有可能推荐的插件全停了也没有用 有可能是防火墙拦截了…

从面试官视角出发,聊聊产品经理的面试攻略

一、请进行自我介绍 这题基本是面试的开胃菜了,估计面试多的,自己答案都能倒背如流啦。 其实自我介绍还是蛮重要的,对我来说主要有 3 个作用:面试准备、能力预估、思维评估。 面试准备:面试官每天都要面 3 ~6 人&am…

Excel文件解析---超大Excel文件读写

1.使用POI写入 当我们想在Excel文件中写入100w条数据时,使用XSSFWorkbook进行写入时会发现,只有将100w条数据全部加载到内存后才会用write()方法统一写入,效率很低,所以我们引入了SXXFWorkbook进行超大Excel文件读写。 通过设置 …

INS 论文分享:一种用于交通流预测的多通道时空Transformer模型

本文主要介绍了我们在长期交通流预测方面的最新研究成果,该成果已发表在信息学领域的顶级期刊《Information Sciences》上,论文题目为《A Multi-Channel Spatial-Temporal Transformer Model for Traffic Flow Forecasting》。该论文的第一作者及通讯作者…

流媒体学习之路(WebRTC)——GCC中ProbeBitrateEstimator和AcknowledgedBitrateEstimator的大作用(7)

流媒体学习之路(WebRTC)——GCC中ProbeBitrateEstimator和AcknowledgedBitrateEstimator的大作用(7) —— 我正在的github给大家开发一个用于做实验的项目 —— github.com/qw225967/Bifrost目标:可以让大家熟悉各类Qos能力、带宽估计能力&a…

移动端定位打卡

签到按钮脚本 Mobile_NS.getCurrPosition(function(result){var lngdangq = result["lng"];var lathoum = result["lat"];var minDistance = null;//alert("addr"+addr);var dkzt = $f("dkzt").val();//alert(dkzt);if(dkzt==0){//$f(…

steam错误代码118?报错118?手把手教你应对Steam错误代码攻略

steam是由美国游戏开发公司Valve开发的一款数字发行、数字版权管理、多人游戏和社交平台。它最初是为Valve公司所开发的游戏而设计的,但现在已经发展成为游戏行业最大的数字发行平台之一。Steam平台提供了丰富的游戏资源,包括最新的独立游戏、大型多人在…

3秒修复老照片,一键智能变高清!

你肯定有一些年代久远的老照片,以及网络下载的图片或视频,不够高清还非常模糊,如果能一键修复成高清就好了!现在推荐一款神奇的Real-ESRGAN镜像,可以将模糊老照片和视频修复成高清晰,动动手分分钟帮你一键焕新!操作指南这就马上附上!你肯定有一些年代久远的老照片,以及…

EC11的中断实验——NVICEXTI

本文隶属于《GD32 示波器项目软件部分重难点及相关疑问解决》 4-EC11的中断实验——NVIC&EXTI 4-1 实验目标以及原理图 GD32E230外部中断EXTI(中断/事件控制器)包括21个相互独立的边沿检测电路并且能够向处理器内核产生中断请求或唤醒事件。EXTI有三种触发类型:上升沿触…

使用stable diffusion设计logo的提示词

使用stable diffusion设计logo的提示词 Stable Diffusion是一种基于图像处理和机器学习的算法,可以用于生成各种类型的图像,包括Logo设计。本文将介绍如何使用Stable Diffusion来设计Logo,并提供一些提示词以帮助读者更好地理解和应用这种技术。 1.了解Stable Diffusion的基…

方正字体 3.0 和 5.0 的比较

默认字体就是宋体(方正书宋)主要区别在于英文字体。5.0 中的斜体、宋体、黑体和楷体的英文字体都变化较大。 个人认为 5.0 更为合理。因为斜体和楷体本身就是较为接近手写字体的字体。而 5.0 中的英文斜体和楷体改的更像手写了。

实验四——代码审查

一、实验题目 :代码审查 二、实验目的 1、熟悉编码风格,利用开发环境所提供的平台工具对代码进行自动格式审查; 2、根据代码规范制定代码走查表,并按所制定的审查规范互审代码。 三、实验内容 1、IDEA环境和PyCharm环境二选一; IDEA环境 (1)预先准备在IDEA环境下实现对输…

vue开发网站—①调用$notify弹窗、②$notify弹窗层级问题、③js判断两个数组是否相同等。

一、vue中如何使用vant的 $notify(展示通知) 在Vue中使用Vant组件库的$notify方法来展示通知,首先确保正确安装了Vant并在项目中引入了Notify组件。 1.安装vant npm install vant --save# 或者使用yarn yarn add vant2.引入:在ma…

nginx--压缩https证书favicon.iconginx隐藏版本号 去掉nginxopenSSL

压缩功能 简介 Nginx⽀持对指定类型的⽂件进行压缩然后再传输给客户端,而且压缩还可以设置压缩比例,压缩后的文件大小将比源文件显著变小,这样有助于降低出口带宽的利用率,降低企业的IT支出,不过会占用相应的CPU资源…

VBA_NZ系列工具NZ06:VBA创建PDF文件说明

我的教程一共九套及VBA汉英手册一部,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到数据库,到字典,到高级的网抓及类的应用。大家在学习的过程中可能会存在困惑,这么多知识点该如何组织…

ssrf漏洞学习——基础知识

一、SSRF是什么? SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。 一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能…