C++基础——常引用与类型转换详解

2023-11-09

通过前两篇对引用的讲解,想必大家都对引用有了较为深刻的理解,没看过的小伙伴可以去看看

:C++基础——引用讲解1       C++基础——引用讲解2_

 

目录

一.常引用:

1.权限的平移

2.权限的放大

3.权限的缩小 :

二.引用的类型转换 

一.常引用:

        这次我来说一说常引用, 常引用是指在引用前加上const,这个涉及到了“权限 ”。  只有指针和引用赋值时,才会有权限的放大、平移与缩小。

1.权限的平移

#include<iostream>
using namespace std;

int main() {
	int a = 10;
	int& ra = a;
	ra++;
	cout << a << endl;

        以上的代码成为权限的平移,因为变量a是int型,可读可写,那么a的别名ra,它的权限可以是可读可写,称为权限的平移,别名改变,原实体也会变。

2.权限的放大


	const int b = 20;
    int& rb = b;

        而这个代码中,变量b有了const修饰,只是可读不可写代码,而rb作为别名,权限是可读可写,这样是非法的,是权限的放大——不可取,会报错!!!

        正确的写法是:

//正确写法
	const int& rb = b;

3.权限的缩小 :


	int c = 100;
	const int& rc = c;

        因为变量c是int型,可读可写,那么c的别名rc,它的权限可以是可读可写,也可以是仅读——称为权限的缩小。

    c++;
	rc++;//报错
	cout << "c的值为:"<<c << endl;
	cout << "rc的值为:"<<rc << endl;

        rc只能是可读,不能改变,但变量c可以,若c++,++C等操作,那么rc也跟着会变。

 

二.引用的类型转换 

int main() {
	double d = 15.56;
	//类型转换
	int i = d;	//d产生临时变量,是临时变量转换为整型  i==15

	//int& j = d;//报错	//也是d产生临时变量,而临时变量具有常性,int& j权限为可读可写,为放大
	const int& k = d; //正确
	return 0;
}

        int i=d; 采用类型转换,d产生临时变量,是临时变量转换为整型,而不是变量d转换类型, 所以i==15 

        执行int& j = d;会//报错   同样是变量d产生临时变量,而临时变量具有常性int& j权限为可读可写,权限大于右边不对等,所以报错,需要用到常引用。

例:

//值传递
void Func(int x) {

}


int main(){
int a = 10;
	const int b = 20;
	int& ra = a;
	const int& rb = b;
	Func(a);
	Func(b);
	Func(ra);
	Func(rb);
}

这四个函数的调用都成功。

    void Func2(int& x) {

    }    

    int main(){
    int a = 10;
	const int b = 20;
	int& ra = a;
	const int& rb = b;
    
    Func2(a);
	Func2(b);    //报错
	Func2(ra);    
	Func2(rb);    //报错

    }

原因就是void Func2(int &)”: 无法将参数 1 从“const int”转换为“int &”。 

正确方式:void Func2(const int& x),const既可以接收可读可写的变量,也可以接收只读变量。

 

        原因就是n为局部变量,结束调用后返回n时,n产生临时变量,临时变量具有常性不可被修改,而int& ret权限为可读可写,所以报错,只有加上const才行。 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++基础——常引用与类型转换详解 的相关文章

随机推荐

  • ISO/IEC 27001:2022 发布(中文),信息安全、网络安全和隐私保护 信息安全管理系统 要求

    ISO IEC 27001 2022 发布 中文 信息安全 网络安全和隐私保护 信息安全管理系统 要求 ISOIEC27001 2022中文信息安全 网络安全和隐私保护 数据集文档类资源 CSDN下载ISOIEC27001 2022中文信息
  • 2021年我最喜欢的Java Web报表工具-实现批量+套打入园通知书

    最近龙哥的园子开张了 不少同学加好友要求入园 为满足同学们的需求 特开此篇 用锐浪JAVA WEB报表实现批量 套打 生成打印入园通知书 锐浪JAVA WEB报表官网 我们先看一下今天要实现的效果 龙哥的 入园通知书 注 自已瞎编的通知书
  • LeetCode第529题:扫雷游戏

    让我们一起来玩扫雷游戏 给你一个大小为 m x n 二维字符矩阵 board 表示扫雷游戏的盘面 其中 M 代表一个 未挖出的 地雷 E 代表一个 未挖出的 空方块 B 代表没有相邻 上 下 左 右 和所有4个对角线 地雷的 已挖出的 空白
  • 驱动的调用

    目录 设备文件 编辑 测试驱动 读写回环测试 步骤 源文件 详细的讲解看注释即可 应用和驱动之间的数据交换 在应用层调用open来打开这个系统文件 在向这个设备文件使用read write等即可调用驱动的函数去工作 设备文件 设备文件连接着
  • Sparkstreaming读取kafka数据写入hive和es

    一 主要流程 此demo用到的软件如下 软件需先自行安装 springboot 1 5 9 RELEASE hadoop 2 7 2 spark 2 1 1 elasticsearch 5 2 2 kafka 0 10 2 1 hive s
  • Cron表达式解读

    背景说明 解读0 0 10 与 0 10 的区别 各个字符代表的含义 0代表从0分开始 代表任意字符 代表递增 1 0 0 10 代表从0分钟开始 每10分钟执行任务一次 启动时间 xx 20 05 第一次执行时间 xx 20 10 第二次
  • 项目心得(三)

    赛车游戏项目心得 介绍 确定项目 分工 进度规划 资源结构 游戏数据结构 遇到的问题 项目展示 开始场景 主菜单场景 成就查询场景 诗词系统场景 无尽塔场景 车库场景 阶位场景 视频演示 项目文件 总结 介绍 我带领的第二次小组团队项目 大
  • 1.1 密码学哈希函数

    我们需要理解的第一个密码学的基础知识是密码学哈希函数 哈希函数是一个数学函数 具有以下三个特性 其输入可为任意大小的字符串 它产生固定大小的输出 为使本章讨论更具体 我们假设输出值大小为256位 但是 我们的讨论适用于任意规模的输出 只要其
  • 操作系统虚拟机linux系统内建立的文件为只读,如何可读可写?

    1 先建立文件 按照自己的需求建立文件 2 打开主目录 发现a c文件为只读形式 3 在终端输入chmod 666 a c 4 返回主目录 文件为可读可写形式 5 打开a c文件就可以编辑代码并保存啦
  • llS6 and llS7解析漏洞

    1 什么是llS Internet Information Services 互联网信息服务 是微软公司由微软公司提供的基于运行Microsoft windows的互联网基本服务 web服务 因为IIS是在windows操作系统平台下开发的
  • 2021-10-25尤破金10.25黄金今日行情价格走势分析及黄金原油最新策略解套

    黄金行情走势分析 周一 10月25日 国际金价徘徊在1800美元重要心理关口附近 美元指数反弹限制了金价升势 在美联储主席鲍威尔表示通胀可能持续到明年后 投资人思索美联储可能会如何应对通胀压力 在鲍威尔上周五 10月22日 表示美联储应开始
  • Pytorch分布式训练(一)

    参考文献 Writing Distributed Applications with PyTorch PyTorch Tutorials 2 0 1 cu117 documentation 33 完整讲解PyTorch多GPU分布式训练代码
  • 简单报价单模板_科普:小程序定制和模板开发有什么区别?

    小程序常见的开发方式有三种 自己源代码开发 找外包团队定制开发 使用小程序模板类开发工具 对于不懂技术的小白来说 源代码开发困难太大 那么后两种方式该如何选择呢 它们到底都有什么区别 接下来就跟大家科普一下这些知识 1 成本不同 小程序模板
  • ClickHouse(四)表引擎

    官网 表引擎 ClickHouse文档 表引擎在 ClickHouse 中的作用十分关键 直接决定了数据如何存储和读取 是否支持并发读写 是否支持 index 支持的 query 种类 是否支持主备复制等 1 表引擎概述 ClickHous
  • unity3D之动态的创建球体游戏对象js

    function OnGUI if GUILayout Button 创建立方体 GUILayout Height 50 var objCube GameObject CreatePrimitive PrimitiveType Sphere
  • JS 插入排序

    算法描述 插入排序的算法描述是一种简单直观的排序算法 它的工作原理是通过构建有序序列 对于未排序数据 在已排序序列中从后向前扫描 找到相应位置并插入 一般来说 插入排序都采用in place在数组上实现 具体算法描述如下 从第一个元素开始
  • 【OpenCV4】拉普拉斯算子提取边缘 cv::Laplacian() 用法详解和代码示例(c++)

    作用原理 拉普拉斯算子可以用于边缘检测 同时该算子不具有方向性 可以同时检测到 X 方向和 Y 方向的边缘 综合后检测出图像的边缘 即拉普拉斯算子是 各向同性 的 这在很多情况下是一个优点 因为我们一般来说会同时关注 X 方向和 Y 方向的
  • xcode4的环境变量,Build Settings参数,workspace及联编设置

    一 xcode4中的环境变量 BUILT PRODUCTS DIR build成功后的 最终产品路径 可以在Build Settings参数的Per configuration Build Products Path项里设置 TARGET
  • 英语台词--冰与火之歌

    Your roof your rules 你的地盘 你做主
  • C++基础——常引用与类型转换详解

    通过前两篇对引用的讲解 想必大家都对引用有了较为深刻的理解 没看过的小伙伴可以去看看 C 基础 引用讲解1 C 基础 引用讲解2 目录 一 常引用 1 权限的平移 2 权限的放大 3 权限的缩小 二 引用的类型转换 一 常引用 这次我来说一