【c++速通】入门级攻略:什么是内联函数?函数重载又是什么?

在这里插入图片描述

屿小夏 : 个人主页
个人专栏 : C++入门到进阶
莫道桑榆晚,为霞尚满天!

文章目录

  • 前言
  • ️函数重载
    • ☁️函数重载的概念
    • ☁️函数重载的作用
    • ☁️C++支持函数重载的原理
  • ️内联函数
    • ☁️内联函数的概念
    • ☁️内联函数的作用
    • ☁️内联函数的特性
  • ️全篇总结

前言

在上一篇文章中我们了解到了命名空间和缺省函数的存在,以及C++为什么要引入它们。本章将继续C++在C语言上扩展出的语法,以帮助大家快速入门。函数竟然还有内联的形式?函数重载,重载的是什么?本篇文章都将会做讲解。

️函数重载

☁️函数重载的概念

是指在同一个作用域内,可以有多个同名函数,但它们的参数列表必须不同(参数类型、参数个数或参数顺序不同)

☁️函数重载的作用

  1. 提高代码的可读性和可维护性:通过使用相同的函数名来表示一组相关的功能,可以使代码更加清晰和易于理解。
  2. 简化函数调用:不同的参数列表可以根据不同的情况选择合适的函数进行调用,避免了编写大量的条件判断语句。
  3. 提供更多的灵活性:通过函数重载,可以根据需要提供多种不同的函数实现,满足不同的需求。

☁️C++支持函数重载的原理

C++支持函数重载,但是C语言不支持函数重载,这是为什么呢?
在C/C++中,一个程序要运行起来,需要经历以下几个阶段:预处理、编译、汇编、链接 。
【c++速通】入门级攻略:什么是内联函数?函数重载又是什么?_第1张图片
【c++速通】入门级攻略:什么是内联函数?函数重载又是什么?_第2张图片

  1. 实际项目通常是由多个头文件和多个源文件构成,当前a.cpp中调用了b.cpp中定义的Add函数时,编译后链接前,a.o的目标文件中没有Add的函数地址,因为Add是在b.cpp中定义的,所以Add的地址在b.o中。那么怎么办呢?

  2. 链接阶段就是专门处理这种问题,链接器看到a.o调用Add,但是没有Add的地址,就会到b.o的符号表中找Add的地址,然后链接到一起。

  3. 链接时,面对Add函数,链接接器会使用哪个名字去找呢?这里每个编译器都有自己的函数名修饰规则。

Windows下vs修饰规则过于复杂,Linux下g++修饰规则简单易懂,下面使用g++演示这个修饰后的名字。

C语言编译后:函数名字的修饰没有发生改变。
【c++速通】入门级攻略:什么是内联函数?函数重载又是什么?_第3张图片

C++编译后:函数名字的修饰发生改变,编译器将函数参数类型信息添加到修改后的名字中。
【c++速通】入门级攻略:什么是内联函数?函数重载又是什么?_第4张图片

以上我们可以看出gcc的函数修饰后名字不变。而g++的函数修饰后变成【_Z+函数长度+函数名+类型首字母】。

这里就理解了C语言没办法支持重载,因为同名函数没办法区分。而C++是通过函数修饰规则来区分,只要参数不同,修饰出来的名字就不一样,就支持了重载。

如果两个函数函数名和参数是一样的,返回值不同是不构成重载的,因为调用时编译器没办法区分。

️内联函数

☁️内联函数的概念

内联函数是一种特殊的函数,它在调用时会被直接展开,而不是通过函数调用的方式进行执行。它通常被用来替代宏,以提高代码的执行效率和可读性。

【c++速通】入门级攻略:什么是内联函数?函数重载又是什么?_第5张图片

【c++速通】入门级攻略:什么是内联函数?函数重载又是什么?_第6张图片

如果在上述函数前增加inline关键字将其改成内联函数,在编译期间编译器会用函数体替换函数的调用.

☁️内联函数的作用

  1. 提高代码的执行效率:由于内联函数在调用时会被直接展开,避免了函数调用的开销,可以减少函数调用的时间消耗。
  2. 提高代码的可读性:内联函数可以将一些简单的代码片段直接嵌入到调用处,使代码更加紧凑和易于理解。

☁️内联函数的特性

  1. 函数体内的代码比较简单:由于内联函数在调用时会被直接展开,因此函数体内的代码应该比较简单,避免展开后的代码过于庞大。
  2. 函数体内不能有循环语句和递归调用:由于内联函数在调用时会被直接展开,如果函数体内有循环语句或递归调用,展开后的代码可能会过于庞大,影响代码的执行效率。
  3. 函数声明和定义必须放在同一个文件中:为了能够在调用处展开函数体,编译器需要在调用处获得函数的定义,因此函数的声明和定义必须放在同一个文件中。
  4. 内联函数适用于频繁调用、代码量较小的函数:由于内联函数在调用时会被直接展开,因此适用于频繁调用、代码量较小的函数。对于代码量较大的函数,由于展开后的代码可能会过于庞大,可能会导致可执行文件的体积增大,从而反而降低代码的执行效率。

【c++速通】入门级攻略:什么是内联函数?函数重载又是什么?_第7张图片

️全篇总结

​ 本章我们知道了函数重载和内联函数的作用和特性使用,他们在以后的使用场景出现的频率是很高的。

☁️ 好了,由于篇幅有限,本章只讲解了两个点,后面还有几个点,后续会再出两篇文章,看完这些,你的c++就算是入门啦!
看到这里了还不给博主留个:
点赞收藏 ⭐️ 关注!
❤️
拜托拜托这个真的很重要!
你们的点赞就是博主更新最大的动力!
有问题可以评论或者私信呢秒回哦。
【c++速通】入门级攻略:什么是内联函数?函数重载又是什么?_第8张图片

你可能感兴趣的:(我与c++的前世今生,c++,开发语言)