C++入门-day03

news2024/11/29 1:52:18

引言:本节我们讲一下C++中的引用、内联函数、Auto、范围for

一、引用 

先看一下下面这段代码: 

 

在这段代码中。我们命名了两个变量,a_a,其中_a就是a的引用 

所谓引用就是a的“别名”,我们看一下这段代码的运行结果: 

发现其地址一样,所以我们去改变_a的值也会把a的值也改变了。 

  • 引用必须在定义时就初始化。
  • 引用自开始定义后,就无法变更引用对象
  • 一个变量可以有多个引用,但是不能引用的引用 。
  • 引用类型需与被引用对象类型保持一致,即:

const int a = 0;

const int& _a = a;

不能:int& _a = a;(因为被引用对象不可改变,引用后也不能改变其值)

但如果:

int a = 0;

const int& _a = a;

这样是可以的,a可以改变,引用后可以改变也可以不改变

引用可以做参数和返回值

 这段代码中将a传入函数,让a+100,并返回a。

可以看到直接改变了a的值。

其实到这里,你可能已经有疑问,这个和之前C中的指针有种说不出的相似。 

 事实上,在编译和cpu视角上,指针和引用是没有区别的,他们都是靠地址来识别的。

在C++中很多学者都不提倡滥用指针。

指针和引用的区别: 

  • 引用在概念上是定义一个变量的“别名“,而指针是存储一个变量的地址
  • 引用在定义时必须初始化,指针没要求。
  • 引用在初始化一个实体后,就不能改变被引用对象,而指针可以。
  • 指针可以NULL(C++11之后推荐使用nullptr)。
  • sizeof(),引用的结果为引用类型的大小,指针为地址的大小(32位是4字节)。
  • 指针可以指针的指针,引用不行。

二、内联函数

如果在函数定义前面加上inline,在release版本下,函数不会创建栈帧,而是在调用函数内部展开,类似于C中的宏函数。

就像下面这样: 

 

 但是,内联函数对于编译器来说只是一个建议,编译器会自动优化。在代码较长、递归的情况下会忽略内联。

注意:内联不能声明和定义分离,因为其在调用函数内部已经展开,就不会有符号表对应了,也就没有地址了。

三、Auto 

这是C++11中的标准,就是在写一个变量的类型时可以用auto替代,让编译器自动推导类型。 

#include <iostream>
using std::cout;
using std::endl;
#define Cout(X) cout<<(X)<<endl
int main(){
   int a = 0;
   auto b = a;//自动推导出b的类型为int
   Cout(typeid(b).name());
   return 0;
}   

 四、范围for

这个也是C++11引入的,它是基于数组的范围进行遍历。 

 

看到这个for循环,学过java的应该特别熟悉,这个不就是是JDK1.5以后出来的一个高级for循环嘛。(C++yyds,哈哈哈)

这种循环就是把arry中的每个数取出来给e,然后用e来操作,只不过第一个for中的e是取出来每个数的引用,所以改变它也就可以改变数组里的值,第二个for中的e就只是每个数组元素的拷贝,用于遍历打印出来。

 

 

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

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

相关文章

互联网云厂商大转向:在海外重燃新「战事」

2023&#xff0c;云厂出海的第七个年头&#xff0c;三朵云的海外布局都在加速&#xff0c;在“主动出海”的大背景下&#xff0c;云厂的海外战场也正在发生新的变化。 作者|思杭 编辑|皮爷 出品|产业家 中国云厂&#xff0c;正在将目光从东南亚转移至中东。 东南亚的互…

代码随想录算法训练营第四十六天 | 518. 零钱兑换 II、377. 组合总和 Ⅳ

518. 零钱兑换 II 视频讲解&#xff1a;动态规划之完全背包&#xff0c;装满背包有多少种方法&#xff1f;组合与排列有讲究&#xff01;| LeetCode&#xff1a;518.零钱兑换II_哔哩哔哩_bilibili 代码随想录 &#xff08;1&#xff09;代码 377. 组合总和 Ⅳ 视频讲解&…

【哈士奇赠书活动 - 41期】- 〖产品设计软技能:创业公司篇〗

文章目录 ⭐️ 赠书 - 《产品设计软技能&#xff1a;创业公司篇》⭐️ 内容简介⭐️ 作者简介⭐️ 编辑推荐⭐️ 赠书活动 → 获奖名单 ⭐️ 赠书 - 《产品设计软技能&#xff1a;创业公司篇》 ⭐️ 内容简介 在创业公司设计产品与在成熟公司设计产品存在明显差异。《产品设计软…

华为防火墙项目

二、知识点 1&#xff0c;会话表&#xff1a;防火墙通过首包建立会话表&#xff0c;其他非首包通过匹配会话表进行通信&#xff0c;就不用查看安全策略啦。 2&#xff0c;长连接 防火墙为各种协议设定了会话老化机制。当一条会话在老化时间内没有被任何报文匹配&#xff0c;则…

【算法|动态规划No.15】leetcode1035. 不相交的线

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…

【教程】在RK3568上部署(C++)语义分割算法BiSeNetv1/v2

引言 在本篇教程中&#xff0c;博主将记录国庆假期前在RK3568上部署分割算法的步骤以及代码。首先说一下&#xff0c;RK3568这个开发板本身的算力大概是0.8T&#xff08;在实际开发中还会用到额外的计算卡&#xff0c;额外的计算卡后面文章再说&#xff0c;本篇文章主要记录在…

AQS的简单说明

1.概述 AQS全称AbstractQueuedSynchronizer&#xff0c;是用来实现锁或者队列同步器的公共基础部分的抽象实现&#xff0c;是整个JUC体系的基石&#xff0c;用于解决锁分配给谁的问题&#xff0c;ReentrantLock底层的实现就是AQS。 2.AQS实现原理 AQS内部有一个由volatile修…

正点原子嵌入式linux驱动开发——Linux内核顶层Makefile详解

之前的几篇学习笔记重点讲解了如何移植uboot到STM32MP157开发板上&#xff0c;从本章就开始学习如何移植Linux内核。 同uboot一样&#xff0c;在具体移植之前&#xff0c;先来学习一下Linux内核的顶层Makefile文件&#xff0c;因为顶层 Makefile控制着Linux内核的编译流程。 L…

如何在Apache和Resin环境中实现HTTP到HTTPS的自动跳转:一次全面的探讨与实践

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

提取歌曲伴奏?用对软件一键帮你搞定~

相信大家经常想获取某首歌曲的伴奏&#xff0c;但是不知从何下手&#xff0c;今天这篇教程给大家分享一个超神奇软件&#xff0c;一键提取歌曲伴奏&#xff01; 第一步&#xff1a;打开【音分轨】APP&#xff0c;进入首页点击【人声分离】 第二步&#xff1a;选择导入方式&…

多电脑之间无线访问文件夹传输文件之“电子神偷”

目录 应用场景说明网络共享文件功能开启步骤1&#xff1a;确保电脑开启网络共享功能步骤2&#xff1a;在自己电脑某个盘创建一个文件夹&#xff0c;作为共享文件夹步骤3&#xff1a;查看当前电脑的用户名和ip地址 访问网络共享文件夹&#xff0c;在电脑B访问获取电脑A的文件数据…

Windows版MySql8.0安装(亲测成功!)

下载 下载地址&#xff1a;点我下载 下载完成后将其解压到自定义目录下,我所有的软件都保存在C:\zhushanglin\WindowsSoft&#xff0c;解压完成后会看见以下目录: 配置环境变量 此电脑 右键,然后点属性&#xff0c;步骤如下: 新建MYSQL_HOME系统变量 编辑Path系统变量&a…

读论文:Real-Time Encrypted Traffic Classification via Lightweight Neural Networks

基于轻量级神经网络的实时加密流量分类 0、摘要 提出一种轻量级模型&#xff0c;设计原则“maximize the reuse of thin modules”&#xff0c;thin modules采用多头注意和一维卷积网络。由于所有数据包的一步交互和多头注意力机制的并行计算&#xff0c;所提出的模型的优势是…

RF元素定位

元素定位方式&#xff1a;id, name, link, partial_link_text, xpath, css id 【登录输入框】id session_email_or_mobile_number input text id session_email_or_mobile_numbername 【登录输入框】name session[email_or_mobile_number] input text name sessi…

react-antd 文件导入按钮增加一个加载状态

1、效果图实例: 2、部分代码 2.1 props : 2.2 handleChange、上传的文件检验 : construction中定义 construction(props) { super(props); this.state { loadingStaus: flase, loadingDisabled: flase, // 作用:按钮如果在加 载状态中&#xff0c;没…

Android多线程学习:线程

一、概念 进程&#xff1a;系统资源分配的基本单位&#xff0c;进程之间相互独立&#xff0c;不能直接访问其他进程的地址空间。 线程&#xff1a;CPU调度的基本单位&#xff0c;线程之间共享所在进程的资源&#xff0c;包括共享内存&#xff0c;公有数据&#xff0c;全局变量…

【Pod】

Pod 一、Pod基本概念二、Pod的使用方式pause容器&#xff08;pod的基础容器&#xff09;核心功能pause容器使得Pod中所有容器可以共享两种资源&#xff1a;网络和存储网络存储 三、Pod分类自主式Pod/静态pod控制器管理的Pod 四、三种容器五、镜像拉取策略&#xff08;image Pul…

云计算安全和云原生安全的关系

云计算安全(Cloud Computing Security)指的是在云环境中保护数据、应用程序和基础设施的安全性。它包括保护云服务提供商的基础设施和平台&#xff0c;以及云服务用户的数据和应用程序。 云原生安全(Cloud-Native Security)则是指在云原生环境中保护应用程序和服务的安全性。云…

谁说手机没有高质量抓拍?华为Mate 60系列与Mate X5让你体验“时间凝固”!

我们日常拍照时&#xff0c;经常会出现“照片糊了”的现象&#xff0c;这是由于被拍摄的人或者物快速移动导致。 来源网图&#xff0c;侵删 抓拍&#xff0c;Snap photography&#xff0c;“抓住时机&#xff0c;把瞬间出现的情景拍摄下来拍照”&#xff0c;又名写实抓拍&…

手写Demo体验volatile可见性的作用

volatile是java的关键字&#xff0c;作用&#xff1a;①保证线程间的可见性&#xff1b;②防止指令重排。下面看一个demo&#xff0c;启动2个线程&#xff0c;一个线程读取flag变量的值&#xff0c;另外一个线程修改flag变量的值。 public class VolatileDemo {private static…