1.C++入门(下)

news2024/10/5 16:24:19

目录

1.引用和指针

2.内联函数

2.1 概念:

2.2 特性:

2.3 与宏对比

3.auto关键字

3.1 简介:

​3.2 使用:

3.3 局限

4.基于范围的for循环


1.引用和指针

因为这个面试中常考,就接着上一篇,把这个放在第一个啦

语法概念上,就是一个别名,和引用实体公用一块空间

底层实现上,是按照指针来实现的

int main()
{
int a = 10;
int& ra = a;
cout<<"&a = "<<&a<<endl;
cout<<"&ra = "<<&ra<<endl;
return 0;
}

我们来看下引用和指针汇编代码的对比:

两者的区别可总结为以下几点:

  1. 引用概念上定义一个变量的别名,指针存储一个变量的地址
  2. 引用必须初始化,指针没有要求
  3. 引用在初始化后,不能再引用其他实体了,而指针可以改变指向
  4. 没有NULL引用,但有NULL指针
  5. sizeof:引用为引用类型的大小,指针就是4/8个字节
  6. 引用自加就是引用实体增加1,指针自加向后偏移一个类型的大小
  7. 有多级指针,但是没有多级引用
  8. 访问实体方式不同,指针需要显式解引用,引用编译器自己处理
  9. 引用比指针使用起来相对更安全

2.内联函数

2.1 概念:

inline+函数定义

优点:兼顾宏和一般函数,不用栈桢(宏),可读性强,能调试,快

不适用范围: 1. 较长的函数  2.递归

原因:会使可执行程序变大

可以来看一个一般函数和直接内联的比较

例如说一个程序有10000次调用,函数本身有50行,普通函数展开的代码有10000+50行,内联函数就会有10000*50行了,就会变得慢而不方便

注意:

  1. 1. 在 release 模式下,查看编译器生成的汇编代码中是否存在 call Add(有就不是直接调用了)
  2. 2. 在 debug 模式下,需要对编译器进行设置,否则不会展开 ( 因为 debug 模式下,编译器默认不会对代码进行优化,以下给出 vs2013 的设置方式 )

release会直接带入函数,debug还是会以call add地址的形式,不会优化,所以可以进行以下处理

2.2 特性:

1. 函数前+inline相当于是发起了一个请求,对编译器而言只是一个建议

如果太长或存在递归,编译器会自动忽略内联(智能C++哈哈)

2.inline不建议声明和定义分离,可将inline定义在头文件中,.cpp文件引用头文件~

2.3 与宏对比

3.auto关键字

3.1 简介:

auto修饰具有自动存储的局部变量,作为一个新的类型指示符来指示编译器,auto声明的变量在编译时期推导而得

int main()
{
    int a=10;
    auto b=a; //会自动存储b为int型
}

注意:auto变量必须初始化


3.2 使用:

1.与指针和引用

2.一行定义多个,只会对第一个进行推导,所以后面必须是一种类型的,否则会编译失败

3.3 局限

1.不能作为函数参数

2.不能声明数组

3.与for循环搭配有妙用

4.基于范围的for循环

 for 循环后的括号由冒号 “ : ” 分为两部分:第一部分是范围内用于迭代的变量,第二部分则表示被迭代的范围 。

注意: 函数数组传参,传的是首元素地址,不可以使用auto& 

与普通循环类似,可以用 continue 来结束本次循环,也可以用 break 来跳出整个循环 。

有所了解就可,在stl中会具体讲解的

5.一个小细节

C++引入了指针空值 nullptr,来更好的初始化指针,NULL实际上只是一个定义为0的宏

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

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

相关文章

Linux 底软开发——对CAN的详细操作(周期发送,异常检测,过滤报文)

Linux底软开发—对CAN发送接收详细操作 文章目录 Linux底软开发—对CAN发送接收详细操作1.保证多条CAN数据发送的周期性2.解析CAN报文数据3.CAN总线异常机制应对4.对CAN报文进行过滤操作5.完整的接收报文代码&#xff08;过滤&#xff0c;心跳检测&#xff0c;解析&#xff09;…

刚刚,百度真来炸场了!

文章目录 前言再看文心智能体开发工具&#xff1a;AgentBuilderAI原生应用开发工具&#xff1a;AppBuilder各种尺寸的模型定制工具&#xff1a;ModelBuilder结语 前言 不知道大家还记得不&#xff0c;去年 ChatGPT 火遍全球的时候&#xff0c;国内率先推出 AI 大模型的是百度家…

【热门话题】AI作画算法原理解析

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 AI作画算法原理解析AI作画算法概述基础原理&#xff1a;机器学习与深度学习卷积…

再谈C语言——理解指针(四)

assert断⾔ assert.h 头⽂件定义了宏 assert() &#xff0c;⽤于在运⾏时确保程序符合指定条件&#xff0c;如果不符合&#xff0c;就报错终⽌运⾏。这个宏常常被称为“断⾔”。 assert(p ! NULL); 上⾯代码在程序运⾏到这⼀⾏语句时&#xff0c;验证变量 p 是否等于 NULL 。…

基于Kepware的Hadoop大数据应用构建-提升数据价值利用效能

背景 Hadoop是一个由Apache基金会所开发的分布式系统基础架构&#xff0c;它允许用户在不需要深入了解分布式底层细节的情况下&#xff0c;开发分布式程序。Hadoop充分利用集群的威力进行高速运算和存储&#xff0c;特别适用于处理超大数据集。 Hadoop的生态系统非常丰富&…

【如何使用chrome开发者工具调试javascript代码】

创作背景 平常开发时我们去解决bug可能会用console.log来来调试&#xff0c;但是断点可以更快地完成工作。 log调试的劣势&#xff1a;但是使用console.log时需要我们手动的打开源码&#xff0c;找到相关代码&#xff0c;插入log语句&#xff0c;然后重新加载页面&#xff0c…

【MySQL】数据库操作指南:数据类型篇

&#x1f331;博客主页&#xff1a;青竹雾色间 &#x1f331;系列专栏&#xff1a;MySQL探险日记 &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 ✨人生如寄&#xff0c;多忧何为 ✨ 文章目录 1. 数值类型1.1 tinyint 类型1.2 bit 类型1.3 小数类型1.3.1 f…

屏幕状态自动检测+鼠标自动操作

目录 一、写在前面 1.1适用场景 1.2涉及到的库 二、函数库 2.1pyautogui-屏幕截图&鼠标操作 2.1.1屏幕截图screenshot函数 2.1.2鼠标移动及单击 2.2Opencv-模板匹配 2.2.1matchTemplate函数 2.2.2minMaxLoc函数 2.2.3相关代码 2.3base64-图片转base64 2.3.1在线…

顺序表的应用-通讯录

顺序表的应用-通讯录 1.操作2.功能要求2.1.功能要求2.2.思路小结2.3.文件梳理2.4.代码实现"SeqList.h""Contact.h""SeqList.c""Contact.c""test.c" 1.操作 链接: 顺序表专题 这篇文章介绍了顺序表的概念与基本操作。 本文将…

54位大咖演讲精华! 中国生成式AI大会圆满收官,TOP50企业榜单揭晓

54位大咖演讲精华&#xff01; 中国生成式AI大会圆满收官&#xff0c;TOP50企业榜单揭晓© 由 红板报 提供 智东西4月19日报道&#xff0c;为期两天的2024中国生成式AI大会&#xff0c;今日在京圆满收官。 54位产学研投嘉宾代表全程干货爆棚&#xff0c;报名咨询人数逾52…

机械臂模型更换成自己的urdf模块

1.将urdf生成slx文件 smimport(rm_65_flange.urdf);%生成Simscape物理模型 2.更换joint部分&#xff08;对应与几个输入几个输出&#xff09;&#xff08;依次更换&#xff09; 3.更改关节部分&#xff08;依次更换&#xff09; 找到urdf文件夹下的meshes文件夹&#xff0c;看…

python爬虫 - 爬取 json 格式数据(股票行情信息:雪球网,自选股)

文章目录 1. 第一步&#xff1a;安装requests库2. 第二步&#xff1a;获取爬虫所需的header和cookie3. 第三步&#xff1a;获取网页4. 第四步&#xff1a;解析网页5. 第五步&#xff1a;解析 json 结构数据体6. 代码实例以及结果展示 python爬虫五部曲&#xff1a; 第一步&…

Window + Ubuntu 双系统无Ubuntu Bios 启动项

文章目录 安装硬盘位置不重要&#xff01;&#xff01;&#xff01;&#xff08;但是我安装在了第二张HDD&#xff09;问题是多盘分位置会导致磁盘主分区变成了简单卷 Bios Ubuntu 启动项修复参考Ubuntu安装U盘进入Try Ubuntu 使用Terminal修复完提示Disable Secure Boot进入Te…

sublime运行编译C和Java

1.先安装终端 参照以下教程 如何在 Sublime 文本编辑器中使用终端&#xff1f;_sublime终端窗口怎么打开-CSDN博客 可能遇到的问题&#xff1a;有些sublime text3可能并没有显示“package control”。这个问题对于笔者来说是有些吊诡的&#xff0c;因为之前一开始安装时是能…

echarts 堆叠柱状图 顶部添加合计

堆叠有3个&#xff0c;后面加了一个对象显示顶部的数据&#xff0c; 其实主要的代码还是在series 的第四项&#xff0c;需要注意的是 series的第四项中的data需要为 data: [0, 0, 0] 顶部的统计才能显示出来 增加的代码如下 {name: 综合,type: bar,stack: total,label: {sh…

tcp inflight 守恒算法的几何解释

接上文&#xff1a;tcp inflight 守恒算法背后的哲学 在 tcp inflight 守恒算法正确性 中&#xff0c;E bw / srtt 的公平最优解是算出来的&#xff0c;如果自然可以用数学描述&#xff0c;那能算出来的东西反过来也一定能通过直感看出来&#xff0c;我倾向于用几何和力学描述…

Linux 深入理解Linux文件系统与日志分析

在Linux系统中&#xff0c;文件名和文件数据是分开存储的 文件数据包含 元信息(即不包含文件名的文件属性) 和 实际数据 文件元信息存储在 inode(索引节点)里&#xff0c; 文件实际数据存储在 block(块)里; 文件名存储在目录块里 查看文件的元信息 stat 文件名 [ro…

Maven基础篇7

私服-idea访问私服与组件上传 公司团队开发流程 本地上传–>repository–>私服 其他成员从私服拿 1.项目完成后发布到私服 在pom文件最后写上发布的配置管理 ​ //写发布的url也就是你发布到哪一个版本&#xff0c;以及写入id ​ ​ 发布的时候&#xff0c;将项…

ubuntu20 中设置桌面背景任务

1. 下载conky 使用 Conky 在 Ubuntu 中显示信息&#xff0c;例如你的阅读计划&#xff0c;可以分几个步骤来完成。Conky 是一款灵活的轻量级系统监视器&#xff0c;能够在桌面上显示各种信息。以下是基本的设置步骤&#xff1a; 安装 Conky 首先&#xff0c;你需要在 Ubuntu…

【Linux学习】Linux进程(二)

文章目录 &#x1f4d5;查看进程&#x1f680;/proc目录&#x1f680;cwd与exe &#x1f4d5;改变进程的工作目录&#x1f680;chdir指令 &#x1f4d5;vim卡住了怎么解决 本篇文章接着【LInux进程&#xff08;一&#xff09;】继续编写。 &#x1f4d5;查看进程 &#x1f68…