当前位置: 首页 > news >正文

c++入门(2)

上期我们说到了部分c++修补C语言的不足,今天我们将剩下的一一说清楚。

函数重载

(1).函数重载的形式

C语言不允许函数名相同的同时存在,但是C++允许同名函数存在,但是有要求:函数名相同,参数不同,构成函数重载。

那么有哪几种参数不同的情况可以呢?
在这里插入图片描述

(2).函数重载编译器如何区分

当我们着手一些大的项目时,就会存在声明和定义分离的情况,那么这个时后编译器还能区分吗?
答案是可以的,这个时候就需要函数名修饰规则登场了。(注意:函数名修饰规则每个编译器都不一样,不需要知道内容,只需要知道有这个规则可以区分函数。)

在这里插入图片描述

引用(重点)

引用并不是定义新变量,而是给一个变量取别名。如图所示,会发现他们指向同一块地址。
在这里插入图片描述
在这里插入图片描述

(1).引用的使用场景

①引用做参数

当我们希望形参的改变影响实参,就可以传引用。例子:Swap交换函数,曾经我们书写还需要穿他的地址,解引用…但是我们现在直接传引用即可。

void Swap(int& a, int& b)
{int tmp = a;a = b;b = tmp;
}
int main()
{int x = 10;int y = 20;Swap(x, y);cout << x << endl;cout << y << endl;return 0;
}

在这里插入图片描述

②引用做返回值

int& func()
{int a = 20;return a;
}
int main()
{int& ret = func();return 0;
}

上述代码有错吗?有什么错?
答案:有错,a是局部变量,当函数结束,a的生命周期结束了,这个时候引用返回的是a本身而不是a的值,就会存在野引用。所以引用不能用于返回临时变量和局部变量
可以用引用返回的:全局,静态,堆变量。

(2).引用的特性

在这里插入图片描述

(3).引用和指针的区别

在这里插入图片描述

内联函数

有些比较短的函数,我们需要多次频繁的去调动,但是不断创建栈帧就会浪费空间,那么C语言是怎么做的呢?宏函数,但是宏函数存在很多的缺陷,所以C++就出现了内联函数
内联函数(inline):调用地方展开,不会建立栈帧

在这里插入图片描述

auto自动识别类型

(1).使用场景

①自动识别复杂类型

我们在学习C语言的时候,有函数指针和数组指针等等复杂类型,那么这个时候就可以用auto来自动识别。
在这里插入图片描述

②范围for

范围for只能用在数组和其他数据结构中!
在这里插入图片描述

空指针nullptr

在c中NULL表示空指针,但是在c++中出现了一个问题。发现了NULL和0没区别。从此以后初始化空指针用:nullptr

以上就是所有入门小知识,恭喜大家,迈进了c++大门~!希望大家永远保持热情勇敢走下去!

相关文章:

  • 代码随想录算法训练营第四十七天|198. 打家劫舍、213. 打家劫舍 II、337. 打家劫舍 III。
  • VR虚拟现实技术应用到猪抗原体检测的好处
  • 蓝桥杯第十四届电子类单片机组决赛程序设计
  • MySql安全加固:可信IP地址访问控制 设置密码复杂度
  • 蓝桥杯 信号覆盖
  • 安装 git 与查看 version
  • LeetCode #104 二叉树的最大深度
  • 5G网络频谱划分与应用
  • C# 找出两个Rectangle或是矩形的相互重合与非重合部分?
  • 【C语言】常见的动态内存管理错误
  • AI Agent
  • 【Web】get请求和post请求的区别
  • fork创建子进程及僵尸进程的产生及规避
  • 百度交出2023年业绩答卷:全力提速AI布局,注入业绩增长新动能
  • React withRouter的使用及源码实现
  • python3.6+scrapy+mysql 爬虫实战
  • 【5+】跨webview多页面 触发事件(二)
  • const let
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • Java程序员幽默爆笑锦集
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • nginx 配置多 域名 + 多 https
  • PHP面试之三:MySQL数据库
  • Python打包系统简单入门
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • XML已死 ?
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 对象管理器(defineProperty)学习笔记
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 智能合约Solidity教程-事件和日志(一)
  • postgresql行列转换函数
  • 如何在招聘中考核.NET架构师
  • 如何正确理解,内页权重高于首页?
  • ​2021半年盘点,不想你错过的重磅新书
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (6)设计一个TimeMap
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (动态规划)5. 最长回文子串 java解决
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • .Mobi域名介绍
  • .NET微信公众号开发-2.0创建自定义菜单
  • .sh
  • @Transaction注解失效的几种场景(附有示例代码)
  • [ linux ] linux 命令英文全称及解释
  • [ 数据结构 - C++]红黑树RBTree
  • [ 网络基础篇 ] MAP 迈普交换机常用命令详解
  • [1181]linux两台服务器之间传输文件和文件夹
  • [Android]如何调试Native memory crash issue
  • [AutoSar]BSW_OS 02 Autosar OS_STACK
  • [ChromeApp]指南!让你的谷歌浏览器好用十倍!