C++入门基础(2)

news2024/11/16 9:21:55

目录

一、引用:

1、定义:

 2、特性:

 3、引用的使用:

4、const引用:控制权限

const引用定义:

const引用可以接收3种对象:

1、正常对象:

2、临时对象:

3、const对象:

总结:

5、引用与指针的关系:

二、内联函数:

​编辑 三、nullptr:

四、总结:


一、引用:

1、定义:

       ✨✨引⽤不是新定义⼀个变量,⽽是给已存在变量取了⼀个别名,编译器不会为引⽤变量开辟内存空间,它和它引⽤的变量共⽤同⼀块内存空间。⽐如:⽔壶传中李逵,宋江叫"铁⽜",江湖上⼈称"⿊旋⻛";林冲,外号豹⼦头✨✨


👉👉 类型& 引⽤别名 =  引⽤对象

 ✨✨引用的出现代替了指针,对引用进行修改,就相当于对本名(引用对象)进行修改

 2、特性:

//在定义时要初始化
//一个变量可以有多个引用
//引用一旦引用一个实体,再不能引用其他实体

初始化,决定了别名,该别名就一直是a的别名



 已经有了实体了,不会引用其他的实体

 

 3、引用的使用:

1. 引⽤在实践中主要是于引⽤传参引⽤做返回值减少拷⻉提⾼效率改变引⽤对象时同时改变被引⽤对象

2.引⽤传参跟指针传参功能是类似的,引⽤传参相对更⽅便⼀些。

3. 引⽤和指针在实践中相辅相成,功能有重叠性,但是各有特点互相不可替代。C++的引⽤跟其语⾔的引⽤(如Java)是有很⼤的区别的,除了⽤法,最⼤的点,C++引⽤定义后不能改变指向,Java的引⽤可以改变指向。

4.⼀些主要⽤C代码实现版本数据结构教材中,使⽤C++引⽤替代指针传参,⽬的是简化程序,避开复杂的指针



4、const引用:控制权限

先补充一点说明:✨临时对象

临时对象:编译器需要⼀个空间暂存表达式的求值结果临时创建的⼀个未命名的对象,C++中把这个未命名对象叫做临时对象;

✨👉🤔临时对象也就是存放一些结果的变量,使用完后会销毁

 C++规定:临时对象具有常性(只能读,不能改)

//表达式求值
// 1、a+b 表达式运算
// 2、int a = 1; double b = a;a转换成double型(隐式类型的转换)
//3、整形提升
//4、传值调用的返回值
//5、截断
//………………

const引用定义:

        可以引⽤⼀个const对象,但是必须⽤const引⽤。const引⽤也可以引⽤普通对象,因为对象的访问权限在引⽤过程中可以缩⼩但是不能放⼤!!!!权限小了,也就是不能进行修改了

👉总之:引用可以引用 权限比自己大的,但是不能引用 权限比自己小的,自己的权限必须和引用对象的权限相同,或者比引用对象小!!

const引用可以接收3种对象:

1、正常对象:
int main()
{
	int a = 10;
	const int& b = a;//权限缩小
	return 0;
}

🧑‍🎓🧑‍🎓但是 b不能修改a的值因为此时b的权限缩小了《《只能读,不能修改

👉👉但是a可以进行修改

2、临时对象:
int main()
{
	double a = 10;
	const int& b = a;
	//int& b = a;不可以
	return 0;
}

🧑‍🎓🧑‍🎓临时对象具有常性,因为要发生隐式转换,对于常性,它的权限是只读不可改,那么我们就要一个只读不可改的引用即const引用


对于常量也可以使用引用,但是根据权限对应,需要使用const引用才行,当然也不能给常量进行修改

int main()
{
	//int& a = 10;错误的引用,常量的权限是只读不可改
	const int& a = 10;

	return 0;
}
3、const对象:
int main()
{
	const int a = 10;//具有了常属性
	const int& b = a;
	return 0;
}

🧑‍🎓🧑‍🎓对于const的对象进行引用时,必须用同等权限的引用,即const引用; 

总结:

const引用就是改变了引用的控制权限权限,其权限满足如下表达式

5、引用与指针的关系:

🧑‍🎓🧑‍🎓 C++中指针和引⽤就像两个性格迥异的亲兄弟,指针是哥哥引⽤是弟弟,在实践中他们相辅相成功能有重叠性,但是各有⾃⼰的特点互相不可替代

 //语法概念上引⽤是⼀个变量的取别名不开空间,指针是存储⼀个变量地址,要开空间。

//• 引⽤在定义时必须初始化,指针建议初始化,但是语法上不是必须的。

//• 引⽤在初始化时引⽤⼀个对象后,就不能再引⽤其他对象;⽽指针可以在不断地改变指向对象。

//• 引⽤可以直接访问指向对象,指针需要解引⽤才是访问指向对象。

//• sizeof中含义不同,引⽤结果为引⽤类型的⼤⼩,但指针始终是地址空间所占字节个数(32位平台下占4个字节,64位下是8byte)

//• 指针很容易出现空指针和野指针的问题,引⽤很少出现,引⽤使⽤起来相对更安全⼀些

二、内联函数:

关键字inline + 函数声明

🧑‍🎓🧑‍🎓inline修饰函数,编译时C++编译器会在调⽤的地⽅展开内联函数,这样调⽤内联函数就不需要建⽴栈帧了,就可以提⾼效率

🧑‍🎓🧑‍🎓inline对于编译器⽽⾔只是⼀个建议(我和你说一声,听不听,取决于你的想法,我无法左右你必须听我的),也就是说,你加了inline 编译器可以 选择在调⽤的地⽅不展开,不同编译器关于inline什么情况展开各不相同,因为C++标准没有规定这个。✨✨inline适⽤于频繁调⽤的短⼩函数,对于递归函数,代码相对多⼀些的函数,加上inline也会被编译器忽略展开太多了,代码量会太大✨✨

 ✨✨C语⾔实现宏函数也会在预处理时替换展开,但是宏函数实现很复杂很容易出错的,且不⽅便调试,C++设计了inline⽬的就是替代C的宏函数

注意:inline不建议声明和定义分离到两个⽂件(分装),分离会导致链接错误。因为inline被展开,就没有函数地址,链接时会出现报错。


 三、nullptr:

C++中NULL可能被定义为字⾯常量0,或者 C中被定义为⽆类型指针(void*)的常量。🧑‍🎓🧑‍🎓不论采取何种定义,在使⽤空值的指针时,都不可避免的会遇到⼀些⿇烦;

🧑‍🎓🧑‍🎓 C++11中引⼊nullptr,nullptr是⼀个特殊的关键字,nullptr是⼀种特殊类型的字⾯量,它可以转换成任意其他类型的指针类型。使⽤nullptr定义空指针可以避免类型转换的问题,因为nullptr只能被隐式地转换为指针类型不能被转换为整数类型


🧑‍🎓🧑‍🎓C++不允许void*类型的数据给其他类型的指针,必须墙砖同类型;

void f1(int x)
{
	cout << "f(int x)" << endl;
} 
void f1(int* ptr)
{
	cout << "f(int* ptr)" << endl;
} 
int main()
{
	f1(0);// 
	f1(NULL);//相当于传一个常数0
	f1((int*)NULL);// f1((void*)NULL);将NULL强转为指针类型
	f1(nullptr);//空指针
	return 0;
}

nullptr相当于c语言中的NULL,但是不能转换成整形

四、总结:

 继续努力!!

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

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

相关文章

Sorted Set 类型命令(命令语法、操作演示、命令返回值、时间复杂度、注意事项)

Sorted Set 类型 文章目录 Sorted Set 类型zadd 命令zrange 命令zcard 命令zcount 命令zrevrange 命令zrangebyscore 命令zpopmax 命令bzpopmax 命令zpopmin 命令bzpopmin 命令zrank 命令zscore 命令zrem 命令zremrangebyrank 命令zremrangebyscore 命令zincrby 命令zinterstor…

vue子组件调用父组件方法

父组件 页面<popoverss ref"pop" :goodspop"goodspop"></popoverss>子组件components: {"popoverss": () > import(../comm/popover.vue)},方法goodspop(e){console.log(e"----")return 9999;},子组件 方法props:[go…

【转载】目标检测mAP的含义

转载自三叔家的猫 https://blog.csdn.net/qq_39056987 https://blog.csdn.net/qq_39056987/article/details/104348493 <div id"content_views" class"markdown_views prism-atom-one-light"><svg xmlns"http://www.w3.org/2000/svg" s…

不用服务器 | 我搭建了一个属于自己的GPT聊天应用!!!

原文地址&#xff1a;aiutools.fun/archives/5118 平台限制部分内容未显示&#xff0c;详情请访问原文。 展示 不废话&#xff0c;直接上干货&#xff01; 我这里搭建的Lobe Chat 支持 聊天TTS & STT 语音会话文生图各种优秀的插件 下面搭建好的样子 前期准备 需要…

(2)滑动窗口算法练习:无重复字符的最长子串

无重复字符的最长子串 题目链接&#xff1a;3. 无重复字符的最长子串 - 力扣&#xff08;LeetCode&#xff09; 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的最长子串的长度。 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是"a…

Java字符串(String、字符串拼接、原理)

文章目录 一、String字符串1.1创建方式【直接赋值、new一个对象】1.1.1 使用字符串字面值直接赋值&#xff1a;&#xff08;1&#xff09;字符串字面量创建String对象的转换过程&#xff08;2&#xff09;一些方法&#xff08;3&#xff09;说明 1.1.2 使用new关键字创建字符串…

Java如何自定义注解及在SpringBoot中的应用

注解 注解&#xff08;Annotation&#xff09;&#xff0c;也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性&#xff0c;与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面&#xff0c;用来对这些元素进行说…

最快视频转绘-AnimateDiff-Lightning

最快视频转绘-AnimateDiff-Lightning Video-to-Video Generation AnimateDiff-Lightning 非常适合视频到视频的生成。使用 ControlNet 提供最简单的 comfyui 工作流程。 「ComfyUI-aki-v1.3.7z」链接&#xff1a;https://pan.quark.cn/s/199a753292d8 下载导入工作流 animat…

182440-00SF 同轴连接器

型号简介 182440-00SF是Southwest Microwave的一款连接器。该连接器采用 BeCu UNqS C17300 材料&#xff0c;并进行了镀金处理&#xff0c;以确保良好的导电性和耐腐蚀性&#xff1b;螺纹采用符合 ASTM A2582 标准的钢制合金&#xff0c;并进行磷酸盐钝化处理&#xff0c;以提高…

FunAudioLLM SenseVoice语音转录与CosyVoice语音合成及语音克隆使用案例

参考: https://fun-audio-llm.github.io/ 1、SenseVoice语音转录 在线体验:https://modelscope.cn/studios/iic/CosyVoice-300M 参考:https://github.com/FunAudioLLM/SenseVoice 下载: pip install -U funasr使用: from funasr import AutoModelmodel_dir = "…

如何从 Vue 2 无痛升级到 Vue 3,一文搞定!

大家好,我是CodeQi! 一位热衷于技术分享的码仔。 随着 Vue 3 的发布,许多开发者都面临着从 Vue 2 升级到 Vue 3 的挑战。 本文将详细介绍如何从 Vue 2 无痛升级到 Vue 3,包括每个步骤的详细说明与代码示例。 让我们开始吧! 准备工作 在正式开始升级之前,请确保你已经…

Linux网络命令:网络工具socat详解

目录 一、概述 二、基本用法 1、基本语法 2、常用选项 3、获取帮助 三、用法示例 1. 监听 TCP 端口并回显接收到的数据 2. 通过 TCP 端口转发数据到 UNIX 套接字 3. 将文件内容发送到 TCP 端口&#xff1a; 4. 使用伪终端进行串行通信 5、启动一个TCP服务器 6、建…

【Linux】网络新兵连

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 引言 在上一篇博客中&#xff0c;我们简单的介绍了一些Linux网络一些比较基本的概念。本篇博客我们将开始正式学习Linux网络套接字的内容&#xff0c;那么我们开始吧&#xff01; 1.网络中的地址管理 大家一…

【Linux】多线程_2

文章目录 九、多线程2. 线程的控制 未完待续 九、多线程 2. 线程的控制 主线程退出 等同于 进程退出 等同于 所有线程都退出。为了避免主线程退出&#xff0c;但是新线程并没有执行完自己的任务的问题&#xff0c;主线程同样要跟进程一样等待新线程返回。 pthread_join 函数…

搜维尔科技:OptiTrack在NAB2024展示了一系列业界领先的媒体技术

广泛的显示和动作捕捉跟踪技术组合涵盖无与伦比的室内和室外 LED 解决方案、前沿技术演示以及最新的软件和硬件产品 可视化技术领域的全球领导者 Planar及其附属公司 3D 跟踪系统的全球领导者OptiTrack宣布&#xff0c;两家公司将在 2024 年全国广播协会 (NAB) 展会上展示其最全…

【动态规划Ⅴ】二维数组的动态规划——0/1矩阵、最大正方形

二维数组的动态规划——0/1矩阵、最大正方形 最大正方形1277. 统计全为 1 的正方形子矩阵221. 最大正方形 01矩阵542. 01 矩阵 最大正方形 下面两个题目是非常相似的&#xff0c;只是一个统计正方形数目&#xff0c;一个统计最大正方形的面积。 1277. 统计全为 1 的正方形子矩…

【优先级队列PriorityQueue】

目录 1&#xff0c;优先级队列 1.1 概念 2&#xff0c;优先级队列的模拟实现 2.1 堆的概念 2.2 堆的存储方式 2.3 堆的创建 2.3.1 堆的向下调整&#xff08;大根堆&#xff09; 2.3.2 建堆的时间复杂度​编辑 2.4 堆的插入与删除 2.4.1 堆的插入 2.4.2 堆的删除 3&a…

源码编译构建LAMP(企业网站架构部署与优化)

部署LAMP平台 LAMV架构是目前成熟的企业网站应用模式之一&#xff0c;指的是协同工作的一整套系统和相关软件&#xff0c;能够提供动态Web站点服务及其应用开发环境。LAMP是一个缩写词&#xff0c;具体包 括 Linux操作系统&#xff0c;Apache网站服务器、MySQL数据库服务器、P…

ElementPlusError: [ElPagination] 你使用了一些已被废弃的用法,请参考 el-pagination 的官方文档 - 报警告之一

一、问题描述&#xff1a; 今天在使用elementui plus的时候遇到了一个奇葩的问题&#xff0c; 就是提示 使用了一些已被废弃的用法&#xff0c; 奇葩就在于我是 复制另一个页面的分页&#xff0c; 一摸一样的东西&#xff0c;就只这个页面报错&#xff0c; 分页也不出 为了这个…

App Cleaner Uninstaller 8.3.0激活版 最佳卸载程序和清理助手

App Cleaner & Uninstaller 完全安全地删除 Mac 上的程序&#xff0c;删除应用程序的残留物&#xff0c;管理扩展程序和启动程序。 App Cleaner & Uninstaller 8.3.0激活版下载 卸载应用程序和所有不需要的垃圾文件 当您将应用程序拖放到废纸篓时&#xff0c;请检查您…