初始c++(2)

news2024/12/19 10:41:58

目录

目录:

        1. 引用

        2. 内联函数inline

        3.auto关键字(大概的认识)

        4.基于范围的for循环(c++11)

        5.nullptr(c++11)


本章最重要的知识点其实是前两个(详细讲解),后面的大概只会介绍一下用法。

        文章开始!!!!

        1:引用

        1.1引用概念

        语法: 类型& 引用变量名 = 引用实体

        引用概念:引用并不是新的变量,而是给一个已知的变量起一个别名,相信别名(小名)这个东西在我们日常当中并不是很少见的,比如说孙悟空的别名--->悟空--->齐天大圣--->大圣-->猴子....从这个例子我们也可以看出来,尽管别名可能不相同,但是这些别名都是指向同一个人的。这也说明了我们的引用其实并不是开辟一块新空间,而是与引用的对象共用同一块内存空间!!

        用下图来理解!

        上面代码的意思是,定义了一个变量a值为10,然后在给a起一个别名,叫做b,a和b是共用同一块内存空间的。

        我们在vs条件下通过监视窗口也可以看出,他们是共用同一块内存空间的。

        

        需要注意的是我们在引用时,引用类型必须和引用实体类型相同。比如说

        

        1.2引用特性

        1:引用在定义时必须初始化,没有空引用

        2:   一个变量可以有多个引用

        3:   引用一旦有了一个实体,就不能引用其他的实体

                我们通过图来讲解

                1:引用必须初始化

                

            2:一个变量可以有多个引用,这就相当于我们前面举得例子(孙悟空),代码如下

                3:引用一旦有了实体之后,就不能在引用其他的变量了,还是通过具体的代码来进行讲解。

                

        到这里我么引用的特性就基本上讲解完毕了。

        1.3常引用(const)

        我们通过代码来进行讲解,这里面还会涉及一些代码的权限,变量在赋值是会干啥的知识点。

        加了const,可以将不同类型的引用用起来,但是可能会丢失数据。

        首先在讲解这个知识点之前,我们还需要额外的知识点。

                权限不能放大,只能缩小。

       代码如下:

        

     

        1.4  引用的使用场景

        1.4.1引用做参数

        我们直接上代码进行讲解。

        

      这是一个交换变量值函数的实现,有了引用之后我们就可以直接使用引用来实现了。

        1.4.2:引用做返回值

        我们先上一份代码:

        

int& Fun()
{
	int n = 10;
	n++;

	return n;
}

int main()
{

	cout << Fun() << endl;

	return 0;
}

         那么这里返回值是啥意思呢?

        如果引用做返回值,那么我们实际返回的内容,就是n的别名。

        我们知道局部变量出作用域的时候,会销毁。我们通过图来解释这段代码的值。

        

       

        1.5 引用做参数与返回值对于性能的影响

        我们知道,当我们函数在传参或返回一个很大的空间的时候,我们的形参会对实参进行拷贝,当实参非常大的时候,那么我们的效率会大大的降低,而用引用却可以大大的提高时间,它并不需要对实参进行拷贝。

         所以我们只需要记住:引用可以提高函数在传参或做返回值时候的效率

        

1.6指针与引用的区别 (重点)

               1.引用必须初始化,指针可以不初始化。

                2.引用一旦有了引用实体之后,就不能改变引用的指向了,指针可以改变指向。

                3.有多级指针,无多级引用。

                4.引用只是给变量起一个别名不开辟空间,指针会开辟空间存储一个变量地址                

                5.引用无NULL值,指针有NULL值

                6.使用sizeof的时候,sizeof(指针)的大小是4或8,sizeof(引用)为引用类型的大小,

                7.引用相对于指针来说比较安全。

                8.指针与引用的使用方式不同,指针需要进行解引用操作,引用为编译器处理。

2:内联函数(inline)

        关键字:inline

        使用语法:只需要在定义完函数前面加一个inline来修饰即可。 

        概念:以inline修饰的函数就称为内联函数,inline修饰的函数,编译器会自动将它展开,减少了函数栈帧的开销提高了时间效率

        但是这个展开并不是绝对的,并不是写了内联函数我们就会在相应的地方进行展开,如果直接展开的话,可能会增加可执行程序的大小。具体的展开可能编译器会帮助我们来进行检查。

        当我们使用inline前我们还需要在编译器中调一下相关的设置,具体的步骤如下。

        

                

           

        当一个内联函数的代码量非常少时,我们调用它的时候,编译器的汇编代码就不会有call这个需要开辟函数栈帧的汇编代码了。

        总结:内联函数的优点:提高了时间效率,少了函数栈帧的开销。缺点:提高了程序的代码量,可能会导致目标文件变大。

      且内联函数就相当于向编译器发送一个请求,以空间来换时间的做法。

        c++中:用enum,const替换了宏常量,内联函数替换了宏。

        

3:auto关键字(c++11)

                auto可以自动识别定义的变量,这样假如我们有一个变量类型的名字非常多的时候,auto是非常实用的。

        这个关键字以后会进行讲解。

4:基于范围的for循环(c++11)

        如果我们需要遍历一个数组我们可以这样写。

        

         使用时的语法我们以:为分界线,:前面的是用来进行迭代的变量,后面的是用来遍历的数组。

这个程序的意思是:将数组中的值拷贝到e中去,打印,然后自动++,自动判断结束。

5:nullptr(c++11)关键字

        不需要引入相关的头文件,它是一个关键字。

        其实nullptr的这个关键字的作用与NULL相似,只是说我们c语言中这个NULL为宏常量

        相当于#define NULL 0;

        nullptr就真正的为指针类型(void*)0.

       感谢大家的耐心观看。

        

        

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

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

相关文章

微信小程序授权登录介绍

目录 一. 小程序登录如何获取微信用户信息 二. 小程序微信授权登录示例 后台代码 小程序代码 效果展示 三. 微信emoji存储问题 一. 小程序登录如何获取微信用户信息 小程序可以通过微信官方提供的登录能力方便地获取微信提供的用户身份标识&#xff0c;快速建立小程序内…

【ArcGIS模型构建器】01:模型构建器Model Builder介绍

文章目录 一、 空间建模概述1. 空间建模概述2. 空间建模步骤 二、Model Builder建模1. Model Builder基础2. Model Builder操作3. Model Builder高级进阶操作 一、 空间建模概述 1. 空间建模概述 空间建模的目的是解决与地理有关的问题&#xff0c;通常涉及多种空间分析操作的…

100097. 合法分组的最少组数

给你一个长度为 n 下标从 0 开始的整数数组 nums 。 我们想将下标进行分组&#xff0c;使得 [0, n - 1] 内所有下标 i 都 恰好 被分到其中一组。 如果以下条件成立&#xff0c;我们说这个分组方案是合法的&#xff1a; 对于每个组 g &#xff0c;同一组内所有下标在 nums 中…

一天吃透Java面试题

给大家分享我整理的Java高频面试题&#xff0c;有小伙伴靠他拿到字节offer了。 Java基础面试题 Java的特点Java 与 C 的区别JDK/JRE/JVM三者的关系Java程序是编译执行还是解释执行&#xff1f;面向对象和面向过程的区别&#xff1f;面向对象有哪些特性&#xff1f;数组到底是…

代码最佳实践和指南(一)

创建代码是许多数据专业的重要组成部分。但是&#xff0c;创建可以运行的代码只是工作的一半。代码还需要清晰&#xff0c;易于传递&#xff0c;并且对干扰具有鲁棒性。通过在项目中遵循一些编码准则&#xff0c;您可以保存自己以后重新构造代码的时间&#xff0c;并使您的合作…

(完全解决)如何输入一个图的权重,然后使用sklearn进行谱聚类

文章目录 背景输入点直接输入邻接矩阵 背景 网上倒是有一些关于使用sklearn进行谱聚类的教程&#xff0c;但是这些教程的输入都是一些点的集合&#xff0c;然后根据谱聚类的原理&#xff0c;其会每两个点计算一次亲密度&#xff08;可以认为两个点距离越大&#xff0c;亲密度越…

知识分享|分段函数线性化及matlab测试

目录 1 使用0-1变量将分段函数转换为线性约束 2 连续函数采用分段线性化示例 3 matlab程序测试 4 matlab测试结果说明 5 分段线性化应用 1 使用0-1变量将分段函数转换为线性约束 2 连续函数采用分段线性化示例 3 matlab程序测试 clc;clear all; gn10;tn1; x_pfsdpvar(1, t…

为什么短信验证码要设置有效期?

安全性&#xff1a;验证码的主要目的是为了验证用户的身份&#xff0c;防止恶意或未经授权的访问。如果验证码没有有效期&#xff0c;恶意用户或攻击者可以获取验证码后无限期地尝试使用它。通过设置有效期&#xff0c;可以限制验证码的生命周期&#xff0c;提高系统的安全性。…

Selenium的find_element()与find_elements()和By的几种方法

打印索引元素的文本属性 def print_list(coordinate_list):print(当前项目地块数&#xff1a;, len(coordinate_list))for i in range(0, len(coordinate_list)):print(i)print(coordinate_list[i].text)看一下By支持的方法 class By:"""Set of supported loc…

02-HotSpot 虚拟机对象探秘

HotSpot 虚拟机对象探秘 对象的内存布局 在 HotSpot 虚拟机中&#xff0c;对象的内存布局分为以下 3 块区域&#xff1a; 对象头&#xff08;Header&#xff09;实例数据&#xff08;Instance Data&#xff09;对齐填充&#xff08;Padding&#xff09; 对象头 对象头记录…

基于ResNet34的花朵分类

一.数据集准备 新建一个项目文件夹ResNet&#xff0c;并在里面建立data_set文件夹用来保存数据集&#xff0c;在data_set文件夹下创建新文件夹"flower_data"&#xff0c;点击链接下载花分类数据集https://storage.googleapis.com/download.tensorflow.org/example_i…

localforage-本地存储的优化方案

前言 前端本地化存储算是一个老生常谈的话题了&#xff0c;我们对于 cookies、Web Storage&#xff08;sessionStorage、localStorage&#xff09;的使用已经非常熟悉&#xff0c;在面试与实际操作之中也会经常遇到相关的问题&#xff0c;但这些本地化存储的方式还存在一些缺陷…

【CSS】BFC 块级格式化上下文

1. 块级格式化上下文&#xff08;BFC&#xff09; 它是一块独立的渲染区域&#xff0c;规定该区域内&#xff0c;常规流块盒的布局。 先来说一下常规流块盒&#xff1a; 常规流块盒在水平方向上&#xff0c;必须盛满包含块常规流块盒在包含块的垂直方向上依次摆放常规流块盒…

「我的AIGC咒语库:分享和AI对话交流的秘诀——如何利用Prompt和AI进行高效交流?」

文章目录 每日一句正能量前言基础介绍什么是Prompt?什么是 Prompt Engineering&#xff1f;为什么需要 Prompt Engineering&#xff1f;如何进行 Prompt Engineering&#xff1f;Prompt的基本原则Prompt的编写模式AI 可以帮助程序员做什么&#xff1f;技术知识总结拆解任务阅读…

2022年全国部分省市跨境电商交易规模汇总

近年来&#xff0c;跨境电商发展迅速&#xff0c;国家陆续出台了相关支持政策&#xff0c;跨境电商优势和潜力有望进一步释放。海关总署数据&#xff0c;根据初步测算&#xff0c;2022年我国跨境电商进出口2.11万亿元&#xff0c;增长9.8%。其中&#xff0c;出口1.55万亿元&…

ATX Power Supply

Pinout 20 PIN MOLEX 39-29-9202 at the motherboard 20 PIN MOLEX 39-01-2200 at the cable PinNameColorDescription13.3VOrange+3.3 VDC23.3VOrange+3.3 VDC3COMBlackGround45VRed+5 VDC

哈夫曼树、哈夫曼编码/解码

哈夫曼树 哈夫曼树的基本介绍 哈夫曼树构建步骤图解 创建哈夫曼树代码实现 """ 创建哈夫曼树 """ class EleNode:""" 节点类 """def __init__(self, value: int):self.value valueself.left None # 指向左子…

新加坡攻略

文章目录 基础信息入境行李App电信交通餐饮购物法规旅游牛车水&#xff08;Chinatown&#xff09;克拉码头&#xff08;Clarke Quay&#xff09;东海岸&#xff08;East Coast&#xff09;丹戎巴葛&#xff08;Tanjong Pagar&#xff09;滨海湾&#xff08;Marina Bay&#xff…

Android学习之路(21) 进程间通信-AIDL与Servce基本使用

Service 与 Thread 和 进程 之间的关系 进程&#xff1a;应用程序在内存中分配的空间。&#xff08;正在运行中的程序&#xff09;线程&#xff1a;负责程序执行的单元&#xff0c;也称为执行路径。&#xff08;需要线程来执行代码&#xff09;。一个进程至少包含一条线程&…

ip报头和ip报文切片组装问题

在tcp层将数据打包封装向下传递后&#xff0c;网络层将其整个看为一个数据&#xff0c;然后对其数据加网络报头操作&#xff0c;在网络层最具有代表的协议就是ip协议。在这里我们探究ipv4的报头。 ip报头 4位版本&#xff1a;指定ip的版本号&#xff0c;对于ipv4来说就是4。 …