C++初阶学习第二弹——C++入门(下)

这篇具有很好参考价值的文章主要介绍了C++初阶学习第二弹——C++入门(下)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C++入门(上):C++初阶学习第一弹——C++入门(上)-CSDN博客

目录

一、引用

1.1 引用的实质

1.2 引用的用法

二、函数重载

三、内敛函数

四、auto关键字

五、总结


前言:

在上面一章我们已经讲解了C++的一些基本语法和命名空间缺省参数的概念,今天这篇,我们将重点讲解C++引用函数重载内敛函数的知识,以及一些其他的有别于c语言的小知识

一、引用

1.1 引用的实质

在我们使用C语言时,遇到一个需要传参的函数时,经常要用到指针这个概念,将一个数据的地址传过去,这样才能在函数中将这个数据进行修改,这个操作是有些繁琐的,在C++中,我们引入了引用的概念,接下来我们就讲解一下引用的用法

引用是对一个变量定义了一个新的名字,而不是定义了一个新的变量,引用的形式就是在一个类型后加一个&

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

运行结果:

C++初阶学习第二弹——C++入门(下),c++,学习,开发语言

如上所示,就可以看出引用的一部分特点,引用的实质实质上就是指针,都是对地址进行操作,上图中的例子,定义出的b和a指向的就是同一个空间,这点可以通过取双方的地址可以看出

int main()
{
	int a = 10;
	int& b = a;
	cout << a << endl;
	cout << b << endl;

	cout << &a << endl;
	cout << &b << endl;
	return 0;
}

运行结果:

C++初阶学习第二弹——C++入门(下),c++,学习,开发语言

也就是说,a和b是指向同一片空间的

C++初阶学习第二弹——C++入门(下),c++,学习,开发语言

1.2 引用的用法

所有就有许多有趣的操作可以进行,例如我们可以用引用来修改原来值,做参数,做返回值等等

先来看一点引用需要注意的点:

1. 引用在 定义时必须初始化
2. 一个变量可以有多个引用
3. 引用一旦引用一个实体,再不能引用其他实体
1、引用修改原来值
int main()
{
	int a = 10;
	int& b = a;
	b = 20;
	cout << a << endl;
	cout << b << endl;
	return 0;
}

C++初阶学习第二弹——C++入门(下),c++,学习,开发语言

2、引用做参数

void Func(int& b)
{
	b = 20;
}
int main()
{
	int a;
	Func(a);
	cout << a << endl;
	return 0;
}

C++初阶学习第二弹——C++入门(下),c++,学习,开发语言

3、引用做返回值

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

C++初阶学习第二弹——C++入门(下),c++,学习,开发语言

二、函数重载

C++相比于C语言还有一个很大的创新就是支持函数重载,简单点说就是不同的函数可以有同一个名字,满足下面条件其中一个即可:

1、参数类型不同

int Add(int x, int y);
double Add(double x,double);

2、参数个数不同

int Add(int a, int b);
int Add(int a, int b, int c);

3、参数顺序不同

int Add(int a, double b);
int Add(double a, int b);

其实函数重载的本质就是函数在预处理、编译、汇编、链接这几步中连接这一步进行操作的,因为我们在调用一个函数时是要到符号表中找到该函数的定义的,不同的函数的在汇编中的名字就不同,所以我们就可以对这些名字相同,但是参数有差异的函数在汇编中按一定规则起不同的名字,从而达到让编译器知道该调用哪个函数的目的

应用实例:

int Add(int x, float y)
{
	return x + y;
}
double Add(double x, int y)
{
	return x + y;
}
int main()
{
	int a = 10;
	float b = 20.1;
	cout << Add(a, b) << endl;
	cout << Add(b, a) << endl;
	return 0;
}

运行结果:

C++初阶学习第二弹——C++入门(下),c++,学习,开发语言

三、内敛函数

内敛函数是将函数在在内敛函数调用的地方直接进行展开,不需要再建立栈帧,从而提高了程序的效率,它的使用方法就是在函数的声明和定义前面加一个inline

我们可以借助一下VS观察一下内联函数的展开是什么意思

首先,我们来看一下普通的函数调用是如何进行的,比如:

int Add(int x, int y)
{
	return x + y;
}
int main()
{
	int x = 1, y = 2;
	int c = Add(x, y);
	cout << c << endl;
	return 0;
}

C++初阶学习第二弹——C++入门(下),c++,学习,开发语言

而对于内敛函数,则可以在遇到时直接进行展开,不需要再去找Add的位置再去调用它:

inline int Add(int x, int y)
{
	return x + y;
}
int main()
{
	int x = 1, y = 2;
	int c = Add(x, y);
	cout << c << endl;
	return 0;
}

C++初阶学习第二弹——C++入门(下),c++,学习,开发语言

内敛函数的这种用法在很大程度上提高了程序的效率,因为我们在调用这些函数的时候不需要每次都去在栈区开辟空间,但这种用法实质上是以空间换时间,因为我们通过反汇编可以看出,它每一次都在原地进行展开实际上需要更大的空间,所以如果调用的函数过于复杂的时候,就算你写的是一个内敛函数,编译器也不会把它当内联函数对待

四、auto关键字

auto关键字是用来方便我们定义变量的,它的用法就是将一个类型过长或者位置类型的变量通过auto来定义,编译器会根据实际情况自行处理

1、类型过长

std::map<std::string, std::string>::iterator a;
auto b = a;

2、未知类型

auto a;

我们在写代码时恰当的使用auto来定义函数,能够很大程度上简化我们的代码,尤其是类型过长的时候

但我们需要注意:

1、auto不能做函数参数

void Func(auto a)
{    }

2、auto不能直接用来定义数组

void TestAuto()
{
    int a[] = {1,2,3};
    auto b[] = {4,5,6};
}

五、总结

C++的入门知识讲到这里就差不多了,本篇的重点是引用和函数重载,这两个内容在我们后面学习类与对象时会经常用到,强烈建议大家多去学习一下,这些内容并不全,有些知识等我们以后慢慢接触吧,总之,欢迎来到C++的课堂,未来我们一同前行!!!

谢谢各位大佬观看,创作不易,还请各位大佬点赞支持!!!文章来源地址https://www.toymoban.com/news/detail-859337.html

到了这里,关于C++初阶学习第二弹——C++入门(下)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 代码混淆与反混淆学习-第二弹

    deflat脚本链接:GitHub - cq674350529/deflat: use angr to deobfuscation 这里以代码混淆与反混淆学习-第一弹中的OLLVM 混淆样本为例进行去除。【LLVM-4.0】 控制流平坦前 控制流平坦后 python deflat.py --file main-bcf --addr 0x401180 deflat.py 成功去除后效果: 去混淆后,效果还算可以,能分析程序流程

    2023年04月09日
    浏览(79)
  • 【C++初阶】第二站:类与对象(上) -- 下部分

    前言: 本章知识点: 类对象模型、 this 指针 专栏: C++初阶 目录 类对象模型 如何计算类对象的大小 类对象的存储方式猜测 结构体内存对齐规则 this指针 this指针的引出 this指针的特性 C语言和C++实现Stack的对比 C语言实现 C++实现 代码演示         Date类实例化了一个d1对象,

    2024年01月23日
    浏览(42)
  • 【C++初阶】第二站:类与对象(上) -- 上部分

    前言:         C++学习的第二站:类和对象(上)文章的上半部分,知识点:面向过程和面向对象初步认识、类的引入、类的定义、类的访问限定符及封装、类的作用域、类的实例化. 目录 面向过程和面向对象初步认识 类的引入 类的定义 类的访问限定符及封装 访问限定符 封装

    2024年01月19日
    浏览(110)
  • 《MetaGPT智能体开发入门》学习笔记 第一章第二章

    使用从 - 通过github仓库获取MetaGPT 代码拉下来后在config文件夹中配置chatGPT key 使用的python环境为3.9.2 metaGPT代码下载后在metagpt文件夹中找statup.py文件,运行以下命令,我是没有成功可能是chatgpt没钱 智能体 = LLM+观察+思考+行动+记忆 多智能体 = 智能体+环境+SOP+评审+路由+订阅+经

    2024年01月17日
    浏览(59)
  • PMP练习题 第二弹

    一个多阶段项目发起人离开公司,项目文件已获得批准并满足其目标。资源预算已到位。项目经理接下来应该怎么做? A:在离开组织的发起人的主管同意下,评估项目的持续需求 B:立即开始项目收尾过程 C:检查与商业论证的符合性 D:延迟重新评估,直至项目结束且资金

    2024年02月07日
    浏览(38)
  • Python 基础面试第二弹

    在Python中,面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它将数据和操作数据的方法组织在一起,形成对象。面向对象的编程主要围绕着类(Class) 和对象(Object)展开,通过封装、继承和多态等概念,实现代码的重用性、可维护性和可扩展性。 Python中的

    2024年02月11日
    浏览(45)
  • 力扣刷MySQL-第二弹(详细解析)

     🎉欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克🍹 ✨博客主页:小小恶斯法克的博客 🎈该系列文章专栏:力扣刷题讲解-MySQL 🍹文章作者技术和水平很有限,如果文中出现错误,希望大家能指正🙏 📜 感谢大家的关注! ❤️ 目录 🚀查找重

    2024年01月18日
    浏览(37)
  • 数据库基础面试第二弹

    乐观锁和悲观锁是在并发编程中使用的两种并发控制机制,用于解决多线程或多进程环境下的数据一致性问题。 1. 悲观锁 (Pessimistic Locking): 悲观锁的思想是假设并发访问会导致冲突,因此在访问共享资源之前,悲观锁会将资源锁定,确保其他线程无法修改资源。悲观锁的

    2024年02月10日
    浏览(34)
  • 计算机网络 基础面试第二弹

    TCP三次握手的过程如下: 第一步(SYN):客户端向服务器发送一个带有SYN(同步)标志的TCP包,指示客户端希望建立连接。这个包包含一个随机的初始序列号(ISN)。 第二步(SYN-ACK):服务器收到客户端的SYN包后,会发送一个带有SYN和ACK(确认)标志的TCP包作为回应。服务

    2024年02月08日
    浏览(53)
  • Kafka核心原理第二弹——更新中

    1. Kafka Producer怎么把消息发送给Broker集群的? 需要指定把消息发送到哪个topic去 首先需要选择一个topic的分区,默认是轮询来负载均衡,但是如果指定了一个分区key,那么根据这个key的hash值来分发到指定的分区,这样可以让相同的key分发到同一个分区里去,还可以自定义par

    2024年02月09日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包