【C++】C++ 引用详解 ⑧ ( 普通引用与常量引用 | 常量引用概念与语法 )

news2024/11/27 8:27:21

文章目录

  • 一、普通引用
    • 1、概念说明
    • 2、代码示例 - 普通引用
  • 二、常量引用
    • 1、常量引用引入
    • 2、常量引用概念与语法
    • 2、代码示例 - 常量引用不可修改





一、普通引用




1、概念说明


之前的 【C++】C++ 引用详解 ① ~ ⑦ 博客中 , 讲解的都是 普通引用 , 也就是 将 普通变量 赋值给 引用 , 过程如下 : 先定义 普通变量 a , 然后定义 已存在变量 a 的引用 b ;

这里的 引用 b 就是 普通引用 ;

// 定义变量 a
int a = 10;

// 定义变量 a 的引用 b
int& b = a;



2、代码示例 - 普通引用


普通引用代码示例 :

// 包含 C++ 头文件
#include "iostream"

// 使用 std 标准命名空间
//		该命名空间中 , 定义了很多标准定义
using namespace std;

// 导入 C 头文件
#include <stdio.h>

int main()
{
	// I . 普通引用
	// 定义变量 a
	int a = 10;

	// 定义变量 a 的 普通引用 b
	int& b = a;

	// 打印 普通引用 b 的值
	printf("b = %d\n", b);

	// 修改普通引用 b 的值
	b = 20;

	// 打印 普通引用 b 的值
	printf("b = %d\n", b);


	// 控制台暂停 , 按任意键继续向后执行
	system("pause");
    return 0;
}

执行结果 :

b = 10
b = 20
Press any key to continue . . .

在这里插入图片描述





二、常量引用




1、常量引用引入


与 变量引用 相对的就是 常量引用 ;

  • 通过 普通引用 , 可以修改 变量的值 ;
  • 常量引用 , 是不可修改的 , 声明一个 普通变量 的 常量引用 , 之后不再使用 变量 , 转而使用 该 常量引用 , 相当于 将 变量 转为了 常量 ;

常量引用 可以令 变量的引用 转为 常量 ;不能通过 常量引用 修改 变量 ;

如果修改 常量引用 的值 , 编译时会报错 :

error C3892: “b”: 不能给常量赋值

2、常量引用概念与语法


在 C++ 语言中 , " 常量引用 " , 英文名称为 Const Reference , 是一种引用类型 , 另外一种引用就是 " 普通引用 " ;

使用 " 常量引用 " 可以将一个变量的值传递给一个函数的 常量引用形参 , 可以保证该变量值不会在函数内部被修改 ;

" 常量引用 " 常用于如下场景 :

  • 作为函数形参
  • 作为函数返回值
  • 定义对象成员

常量引用 语法 :

const T& variable_name = value;
  • T 是 常量引用 的类型名称 , 如 : int , string ;
  • variable_name 是 常量引用 的名称 , 调用该常量引用 , 不可修改 value 变量的值 ;
  • value 是 被引用的 变量 , 调用该变量可以修改变量的值 ;

2、代码示例 - 常量引用不可修改


在下面的函数中 , 先声明了 普通变量 a ,

然后定义了 变量 a 的 常量引用 b ,

常量引用 b 其 本质就是一个常量 , 通过 常量引用 b 可以获取 变量 a 的值 , 但是无法修改 变量 a 的值 ;

如果强行通过 常量引用 b 修改 变量 a 的值 , 则会报错 :

error C3892: “b”: 不能给常量赋值

错误代码示例 :

// 包含 C++ 头文件
#include "iostream"

// 使用 std 标准命名空间
//		该命名空间中 , 定义了很多标准定义
using namespace std;

// 导入 C 头文件
#include <stdio.h>

int main()
{
	// II . 常量引用
	// 定义变量 a
	int a = 10;

	// 定义变量 a 的 常量引用 b
	const int& b = a;

	// 打印 常量引用 b 的值
	printf("b = %d\n", b);

	// 修改 常量引用 b 的值
	// 报错 : error C3892: “b”: 不能给常量赋值
	b = 20;


	// 控制台暂停 , 按任意键继续向后执行
	system("pause");
    return 0;
}

执行结果 :

已启动生成…
1>------ 已启动生成: 项目: HelloWorld, 配置: Debug Win32 ------
1>hello_world.cpp
1>D:\002_Project\006_Visual_Studio\HelloWorld\HelloWorld\hello_world.cpp(24,2): error C3892: “b”: 不能给常量赋值
1>已完成生成项目“HelloWorld.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0==========

在这里插入图片描述

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

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

相关文章

docker容器一直在restarting

chown: changing ownership of ‘/var/lib/mysql/’: Permission denied 问题也同样处理 参考

【Zblog搭建博客网站】windows环境搭建博客并上线

文章目录 1. 前言2. Z-blog网站搭建2.1 XAMPP环境设置2.2 Z-blog安装2.3 Z-blog网页测试2.4 Cpolar安装和注册 3. 本地网页发布3.1. Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 想要成为一个合格的技术宅或程序员&#xff0c;自己搭建网站制作网页是绕…

【管理运筹学】第 6 章 | 运输问题(3,表上作业法 | 最优解的判断)

文章目录 引言二、表上作业法2.2 最优解的判断2.2.1 闭回路法2.2.2 位势法 写在最后 引言 承接前文&#xff0c;我们继续学习表上作业法的第二步 —— 最优解的判断。 二、表上作业法 表上作业法的求解工作在运输表上进行&#xff0c;运输问题解的每一个分量&#xff0c;都唯…

MFC-RIBBON/QT混合编程‘完美’方案

[工程建立] 在&#xff36;&#xff23;用向导生成一个&#xff31;&#xff34; &#xff27;&#xff35;&#xff29;程序&#xff0c;将里面的代码文件等删除&#xff08;.vcxproj等保留&#xff09;在&#xff36;&#xff23;用向导生成另一个&#xff2d;&#xff26;…

怎么学习黑客?最全黑客自学路线

谈起黑客&#xff0c;可能各位都会想到&#xff1a;盗号&#xff0c;其实不尽然&#xff1b;黑客是一群喜爱研究技术的群体&#xff0c;在黑客圈中&#xff0c;一般分为三大圈&#xff1a;娱乐圈 技术圈 职业圈。 娱乐圈&#xff1a;主要是初中生和高中生较多&#xff0c;玩网恋…

乱糟糟的YOLOv8-detect和pose训练自己的数据集

时代在进步&#xff0c;yolo在进步&#xff0c;我还在踏步&#xff0c;v8我浅搞了一下detect和pose&#xff0c;记录一下&#xff0c;我还是要吐槽一下&#xff0c;为啥子这个模型就放在了这个文件深处&#xff0c;如图。 以下教程只应用于直接应用yolov8&#xff0c;不修改。…

k8s之存储篇---数据卷Volume

数据卷概述 Kubernetes Volume&#xff08;数据卷&#xff09;主要解决了如下两方面问题&#xff1a; 数据持久性&#xff1a;通常情况下&#xff0c;容器运行起来之后&#xff0c;写入到其文件系统的文件暂时性的。当容器崩溃后&#xff0c;kubelet 将会重启该容器&#xff…

C++中为什么有模板的函数不能和.h文件分离,即分别声明和定义

目录 1.查看问题 2.探索问题 3.解决问题 1.查看问题 1.先看下面三个文件 stack.h stack.cpp test.cpp 2.探索问题 有了解的小伙伴应该知道大概率是在预处理&#xff0c;编译&#xff0c;汇编&#xff0c;链接中编译环节出错了&#xff0c;它在其他文件中无法通过定义找到函…

高效UI设计必备的4个UI设计软件,真的好用!

随着UI设计工作的不断发展&#xff0c;工作中的需求变得更加多样&#xff0c;一个好用的 UI 设计软件将极大减轻设计师的工作负担&#xff0c;提高设计师的工作效率&#xff0c;今天本文精选了4款好用的UI设计软件&#xff0c;并将逐一介绍的它们各自的特点和用法&#xff0c;给…

linux+QT+FFmpeg 6.0,把多个QImage组合成一个视频

直接上代码吧: RecordingThread.h#ifndef RECORDINGTHREAD_H #define RECORDINGTHREAD_H #include "QTimer" #include <QObject> #include <QImage> #include <QQueue>extern "C"{//因为FFmpeg是c语言,QT里面调用的话需要extern "C…

基于Java swing和mysql实现的学生选课管理系统(源码+数据库+运行指导视频)

一、项目简介 本项目是一套Java swing和mysql实现的学生选课管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、项目文档、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严…

浮点动作 转 布尔动作(FloatActionToBooleanAction)

文章目录 思维导图具体步骤1、“浮点动作”的创建2、“布尔动作”的创建3、用“FloatToBoolean.cs”把两个动作联系起来 注意 思维导图 具体步骤 1、“浮点动作”的创建 “右手柄 扳机键 按下”需借助“Input.UnityInputManager.1DAxisAction”预设体成为FloatAction&#xf…

Java 读取TIFF JPEG GIF PNG PDF

Java 读取TIFF JPEG GIF PNG PDF 本文解决方法基于开源 tesseract 下载适合自己系统版本的tesseract &#xff0c;官网链接&#xff1a;https://digi.bib.uni-mannheim.de/tesseract/ 2. 下载之后安装&#xff0c;安装的时候选择选择语言包&#xff0c;我选择了中文和英文 3.…

代码随想录打卡—day44—【DP】— 8.28 完全背包基础

1 完全背包基础 完全背包和01背包问题唯一不同的地方就是&#xff0c;每种物品有无限件。 而完全背包的物品是可以添加多次的&#xff0c;所以要内嵌的背包容量循环从小到大去遍历&#xff0c;即&#xff1a;&#xff08;至于为什么&#xff0c;内嵌背包容量循环从小到大遍历…

mysql 计算两点之间距离

先说一下我们可能会用到的一些场景&#xff0c;这样同学们可以先评估&#xff0c;该篇文章是否对你有帮助&#xff01; 场景&#xff1a; 假设 美团&#xff0c;我点外卖时&#xff0c;系统会让我先进行定位&#xff0c;比如我定位在了 A 点&#xff0c;系统就会给我推荐&…

八路参考文献:[八一新书]许少辉.乡村振兴战略下传统村落文化旅游设计[M]北京:中国建筑工业出版社,2022.

八路参考文献&#xff1a;&#xff3b;八一新书&#xff3d;许少辉&#xff0e;乡村振兴战略下传统村落文化旅游设计&#xff3b;&#xff2d;&#xff3d;北京&#xff1a;中国建筑工业出版社&#xff0c;&#xff12;&#xff10;&#xff12;&#xff12;&#xff0e;

多商户门店会员卡充值收款营销公众号开发

多商户门店会员卡充值收款营销公众号开发 一、功能特色&#xff1a; 专注于收款码支持商户入驻功能&#xff0c;降低运营成本资金可以直接到达商户&#xff0c;支持微信分账方式分配佣金&#xff0c;完全符合支付结算相关法规充值、充次支持给赠值设置有效期&#xff0c;促进…

防雷浪涌保护器选型方案

防雷浪涌保护器是一种用于保护电气设备免受雷电或其他电源干扰引起的过电压或过电流的装置。防雷浪涌保护器的选型应根据国家标准、设备要求和实际工程条件进行&#xff0c;以达到既满足防雷验收要求&#xff0c;又能有效保护设备的目的。地凯科技介绍一些常用的防雷浪涌保护器…

论文解读 | OmniObject3D:用于逼真感知、重建和生成的大词汇量3D对象数据集

原创 | 文 BFT机器人 这篇论文的主要目标是介绍和探索OmniObject3D数据集&#xff0c;该数据集包含大量真实扫描的3D物体&#xff0c;涵盖了190个类别&#xff0c;提供了多种丰富的注释&#xff0c;包括纹理3D网格、采样点云、多视图图像等。作者将OmniObject3D应用于多个3D视…

mysql和mybatisPlus实现:datetime类型的字段范围查询

前提说明 数据库在存储数据时,我们为了精确一下时间,便会把改时间类型的字段设置为datetime类型; 在过滤数据库数据时,我们又需要对该字段进行一个范围的过滤 由此,便出现了这篇博客 datetime数据类型 在MySQL中,datetime数据类型用于保存日期和时间的值。它的格式为Y…