c++之说_15|成员函数的const尾缀修饰 ( const const)

news2024/12/26 12:04:46

我记得我刚接触c++的时候  遇到成员函数 右边尾部  写了个const 我当时就很蒙 
不过慢慢的也从大佬口中获得一二经验了

class kj
	{

	public:
		void get()
		{

			printf("无修饰\n");

		}
		void get()const
		{

			printf("const 修饰\n");

		}

	};

大概就是这个样子  当时我抓耳挠腮的看不懂啊  怎么写法没学过呢(学得少了)

main函数调用

int main()
{
	
	kj f = kj();
	const kj f2 = kj();
	
	
	f.get();
	f2.get();

	return 0;
}

结果

我们都知道const对象是不希望改变的  但是我们写的很多成员函数都或多或少的 改变了this对象

所以const尾缀修饰的成员函数  就是专门给 const对象调用的  const对象没有资格调用非const尾缀修饰的成员函数

在指针上也是一样的

kj* pf = &f;
const kj* pf2 = &f2;
pf->get();
pf2->get();

有人会说 非const 对象  难道就没法调用 const尾缀修饰的函数了吗?

当然是可以的  但是反过来就不行了

kj f = kj();
f.get();

最近我见到一个用&  &&  const &  const&& 尾缀修饰的

烧是真的烧

所以来看看

class kj
	{

	public:
	
		void get()&&
		{

			printf("&&\n");

		}
		void get()const&&
		{

			printf("const &&\n");

		}
		void get()&
		{

			printf("&\n");

		}
		void get()const&
		{

			printf("const &\n");

		}
	

	};

main

int main()
{
	const kj&& pp1 = kj();
	const kj& pp2 = kj();
	
	kj f = kj();
	const kj f2 = kj();
	kj& pp3 =f;
	kj&& pp4 = kj();
	
	f.get();
	f2.get();
	pp1.get();
	pp2.get();
	pp3.get();
	pp4.get();
	kj().get();
	const kj().get();

	return 0;
}

我们看到

f 是一个左值对象(变量) 调用的是 & 尾缀修饰的函数

f2 是const 修饰的左值对象(变量) 调用的是const & 尾缀修饰的函数

pp1 是const 修饰的右值引用对象(变量) 调用的是const & 尾缀修饰的函数

pp2 是const 修饰的左值引用对象 (变量)调用的是const & 尾缀修饰的函数

pp3 是左值引用对象(变量)调用的是 & 尾缀修饰的函数

pp4 是右值引用对象(变量)调用的是 & 尾缀修饰的函数

kj().get(); 完全的右值临时对象调用 get函数 调用的是 && 尾缀修饰的函数
const kj().get(); 完全的const 右值临时对象调用 get函数 调用的是const && 尾缀修饰的函数

大家是不是好奇 pp1 pp4 明明是右值引用的对象(变量) 为啥调用的是 左值引用尾缀修饰的函数 

之前说过  有名的右值叫左值  

所以她两就是本就是左值  因为有名了  右值引用 引用的那一刻 她们便有了名字

kj()这种才叫无名右值 还有 函数返回值(非左值引用返回)  也属于无名右值  


kj create1()
{
	auto n = kj();
	return n;
}
kj&& create2()
{
	
	return kj();
}



///
create1().get();
create2().get();

还有就是  &  和 const &  与  无修饰  和 const 修饰的  一样 无法重写
    

参考代码

class kj
	{

	public:
		/*void get()
		{

			printf("无修饰\n");

		}*/
		/*void get()const
		{

			printf("const 修饰\n");

		}*/
		void get()&&
		{

			printf("&&\n");

		}
		void get()const&&
		{

			printf("const &&\n");

		}
		void get()&
		{

			printf("&\n");

		}
		void get()const&
		{

			printf("const &\n");

		}
		/*void get()
		{

			printf("const &\n");

		}
		void get()const
		{

			printf("const");

		}*/

	};

kj create1()
{
	auto n = kj();
	return n;
}
kj&& create2()
{
	
	return kj();
}


int main()
{
	const kj&& pp1 = kj();
	const kj& pp2 = kj();
	
	kj f = kj();
	const kj f2 = kj();
	kj& pp3 =f;
	kj&& pp4 = kj();
	
	f.get();
	f2.get();
	/*

	kj* pf = &f;
	const kj* pf2 = &f2;
	pf->get();
	pf2->get();*/

	pp1.get();
	pp2.get();
	pp3.get();
	pp4.get();
	kj().get();
	const kj().get();

	create1().get();
	create2().get();

	return 0;
}

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

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

相关文章

pytorch--Pooling layers

文章目录 1.torch.nn.MaxPool1d()2.torch.nn.MaxPool2d3.torch.nn.AvgPool2d()4.torch.nn.FractionalMaxPool2d()5.torch.nn.AdaptiveMaxPool2d()6.torch.nn.AdaptiveAvgPool2d() 1.torch.nn.MaxPool1d() torch.nn.MaxPool1d() 是 PyTorch 库中的一个类,用于在神经网…

服务器硬件知识

服务器硬件基础知识 简介 原理详解 服务器硬件的工作原理是将来自客户端的请求处理并返回结果。服务器硬件是指用于构建服务器系统的物理组件。它包括处理器(CPU)、内存(RAM)、存储设备(硬盘或固态硬盘)…

uniapp使用md5加密

目录 一、安装md5 二、在main.js中全局引入并挂载到vue实例中 三、使用md5加密 一、安装md5 在终端输入 npm install js-md5 -D 二、在main.js中全局引入并挂载到vue实例中 import Md5 from js-md5 Vue.prototype.$md5 Md5 三、使用md5加密 let password_md5 this.$md…

任务3.8.3 利用RDD统计每日新增用户

任务目标 统计给定用户访问历史数据中,每日的新增用户数量。 数据准备 原始数据格式:每行包含两个字段,日期和用户名,以逗号分隔。示例数据:2024-05-01,mike 2024-05-01,alice 2024-05-01,brown ...解决方案 使用倒…

【HTML01】HTML基础-基本元素-附带案例-作业

文章目录 HTML 概述学HTML到底学什么HTML的基本结构HTML的注释的作用html的语法HTML的常用标签:相关单词参考资料 HTML 概述 英文全称:Hyper Text Markup Language 中文:超文本标记语言,就将常用的50多个标记嵌入在纯文本中&…

18V-150V降5V100mA恒压WT5101

18V-150V降5V100mA恒压WT5101 WT5101是一款非隔离高集成度且低成本的PWM功率开关,用于外围元器件精简的小功率非隔离开关电源,恒压5V输出,输入电压18V-150V。WT5101集成有完善的保护功能:VDD欠压保护、逐周期电流限制、过流保护、…

3D视觉引导机器人提升生产线的自动化水平和智能化程度

随着智能化技术的不断发展,汽车制造企业正积极寻求提升智能化水平的途径。富唯智能的3D视觉引导机器人抓取技术为汽车制造企业提供了一种高效、智能的自动化解决方案。 项目目标 某汽车制造企业希望通过引入智能化技术提升生产线的自动化水平和智能化程度。他们希望…

RockChip Android12 Settings二级菜单

一:概述 本文将针对Android12 Settings的二级菜单System进行说明。 二:System 1、Activity packages/apps/Settings/AndroidManifest.xml <activityandroid:name=".Settings$SystemDashboardActivity"android:label="@string/header_category_system&quo…

代码随想录算法训练营第四十二天|1049. 最后一块石头的重量 II , 494. 目标和 , 474.一和零

1049. 最后一块石头的重量 II - 力扣&#xff08;LeetCode&#xff09; class Solution {public int lastStoneWeightII(int[] stones) {if(stones.length 0){return 0;}if(stones.length 1){return stones[0];}int sum 0;for(int i0;i<stones.length;i){sum stones[i];…

【数学】负数

Hello!大家好&#xff0c;我是学霸小羊&#xff0c;今天讲讲负数。 目录 1.负数的概念 2.绝对值 附&#xff1a;c求绝对值方法 3.负数的大小比较 1.负数的概念 比0小的数&#xff0c;叫做负数。 负数全称负实数&#xff0c;负数与正数表示意义相反的量。负数用负号(Min…

最新版WordPress网创资源美化主题整站源码更新自动同步插件

最新更新了美化右侧悬浮图标 底部分类板块&#xff0c;以及文章自动同步插件 1.支持分类替换 将主站同步过来的文章分类进行替换 2.支持本地化文章图片 &#xff08;使用储存桶可能会导致无法保存图片&#xff09; 3.支持自定义文章作者&#xff08;选择多个作者则同步到的…

C++之模板(二)

1、类模板 2、使用类模板 类模板在使用的时候要显示的调用是哪种类型&#xff0c;而不是像函数模板一样能够根据参数来推导出是哪种类型。 Stack.h #include <stdexcept>template <typename T> class Stack { public:explicit Stack(int maxSize);~Stack();void …

SEO之预估流量及价值(一)

初创企业搭建网站的朋友看1号文章&#xff1b;想学习云计算&#xff0c;怎么入门看2号文章谢谢支持&#xff1a; 1、我给不会敲代码又想搭建网站的人建议 2、新手上云 正规公司关键词研究的最后一步是预估搜索流量及价值。 个人站长做关键词研究不一定需要这一步。找到最合适…

提取人脸——OpenCV

提取人脸 导入所需的库创建窗口显示原始图片显示检测到的人脸创建全局变量定义字体对象定义一个函数select_image定义了extract_faces函数设置按钮运行GUI主循环运行显示 导入所需的库 tkinter&#xff1a;用于创建图形用户界面。 filedialog&#xff1a;用于打开文件对话框。 …

DDP算法之线性化和二次近似(Linearization and Quadratic Approximation)

DDP算法线性化和二次近似 在DDP算法中,第三步是线性化系统动力学方程和二次近似代价函数。这一步是关键,它使得DDP能够递归地处理非线性最优控制问题。通过线性化和二次近似,我们将复杂的非线性问题转换为一系列简单的线性二次问题,逐步逼近最优解。通过这些线性化和二次近…

STM32--IAP程序升级实验

1. STM32程序升级方法 1.1 ST-link / J-link下载 将编译生成的hex文件使用ST-Link/J-Link工具直接下载进 Flash 即可。Keil中点击下载也能一键下载。下载后的代码会存放在Flash的起始地址0x0800 0000处。 简单补充一句&#xff0c;bin文件和hex文件的区别&#xff1a; bin文…

易备防勒索备份方案与成功案例

随着信息化的发展&#xff0c;数据安全的重要性愈加突出。据 Hiscox 全球网络安全统计&#xff0c;在勒索软件攻击事件当中&#xff0c;64%以上的用户是中小企业。因此&#xff0c;制定完善的灾备策略&#xff0c;是抵御网络威胁的终极方案。而在诸多数据备份方案中&#xff0c…

Opencv高级图像处理

文章目录 Opencv高级图像处理图像坐标二值化滤波高斯滤波中值滤波 开闭运算检测霍夫圆检测边缘检测Canny边缘检测findContours区别傅里叶变换-高/低通滤波 直线检测 相机标定视频处理视频格式 模板摄像头处理&#xff08;带参调节&#xff09;单图片处理&#xff08;带参调节&a…

defer+recover机制处理错误

问题&#xff1a;多个协程工作&#xff0c;其中一个协程出现panic&#xff0c;导致程序崩溃 解决办法&#xff1a;利用deferrecover捕获panic进行处理&#xff0c;即使协程出现错误&#xff0c;主线程仍然不受影响可以继续执行 package mainimport ("fmt""tim…

Win32编程:第一个窗口程序(Part.1)

Win32系统编程是指在Windows操作系统上使用Win32 API进行软件开发的过程&#xff1b;Win32 API是Windows操作系统提供的应用程序接口&#xff0c;允许程序与操作系统进行交互&#xff0c;实现各种功能。 以下是Win32系统编程的基本概念和步骤&#xff1a; 环境准备 开发工具&…