重载和内联函数

news/2025/1/30 23:53:05/

函数的默认参数

默认参数是指调用函数的时候,如果不写实参,那么将使用一个缺省值。

使用默认参数可以使你的函数更加灵活,同时减少了在不同上下文中为相同的参数重复编写相同的代码的需要。

return_type function_name(data_type parameter=value, data_type parameter=value, ...);

注意事项

  1. 如果函数的声明和定义是分开书写的,那么在函数声明中设置默认参数,而在函数定义中则不应设置默认参数。
  2. 函数默认参数必须从右到左设置。也就是说,如果你为一个参数设置了默认值,那么在这个参数右边的所有参数也都必须设置默认值。
  3. 在调用函数时,如果你指定了一个参数的值,那么在这个参数左边的所有参数都必须被指定。

例子

#include <iostream>
using namespace std;void displayMessage(string message = "Hello, World!") {cout << message << endl;
}int main() {displayMessage();        // 将输出 "Hello, World!"displayMessage("Hello, OpenAI!"); // 将输出 "Hello, OpenAI!"return 0;
}

函数重载

在C++中,函数重载是允许程序员创建多个具有相同名字但参数列表不同的函数的特性。这是实现多态性的一种方式,函数根据传入的参数的数量和类型来决定哪个函数将被调用。

以下是一些关于函数重载的注意事项:

  1. 匹配过程:在调用重载函数时,编译器根据实参的数量、类型和顺序与重载函数的形参进行匹配,然后决定调用哪个函数。如果没有找到匹配的函数,编译器将报告错误。
  2. 类型转换:如果传入的实参类型与形参类型不匹配,C++会尝试进行类型转换以使之匹配。但是,如果转换结果导致有多个函数可以匹配,编译器将报告错误,因为它无法确定应该调用哪个函数。
  3. 引用和变量:引用可以作为函数重载的条件。但是,如果实参是变量,编译器将形参类型本身和类型引用视为具有相同的特征。
  4. 默认参数:如果重载的函数有默认参数,可能会导致匹配失败,因为编译器可能无法确定调用哪个函数。
  5. const限定符:const不能作为函数重载的特征。即使一个函数参数为const,而另一个函数参数非const,这还是不能被视为重载。
  6. 返回值类型:函数的返回值类型不能作为函数重载的特征。如果两个函数的参数列表完全相同,但返回值类型不同,编译器不会视这为函数重载。
  7. 名称修饰:在C++编译过程中,编译器使用一个叫做"名称修饰"或"名称混淆"的过程来处理函数重载。它会给每个函数名添加一些特殊字符,以区分参数列表不同的同名函数。这个过程是自动进行的,对程序员来说通常是透明的。

内联函数

内联函数是 C++ 的一个特性,用于提高程序的运行速度。当函数被声明为内联时,它的函数体会在编译时被插入到每个调用该函数的地方,从而减少了函数调用的开销。

语法

inline return_type function_name(parameters) {// 函数体
}

通常,内联函数的声明和定义会被写在一起,并且通常在头文件中进行。

注意事项

  1. 效率与内存使用:内联函数可以提高程序的运行速度,因为它避免了函数调用的开销。但是,这种效率的提升是以增加程序的内存使用为代价的,因为函数的代码在每个调用的地方都会被复制一份。
  2. 函数大小:如果函数体非常大,编译器可能会忽略内联声明,因为这可能导致生成的代码过大。编译器通常会对小型函数(如存取函数)进行内联处理。
  3. 不能递归:内联函数不能是递归的。因为递归函数需要通过堆栈跟踪其递归深度,而内联函数的目标是消除函数调用的开销,包括堆栈操作。

http://www.ppmy.cn/news/97305.html

相关文章

项目中遇到的一些问题总结(十三)

extension-configs 和 shared-configs 的区别 在 Nacos 配置管理中&#xff0c;extension-configs 和 shared-configs 分别是两种不同类型的配置&#xff0c;它们的主要区别在于它们的使用场景和作用。 extension-configs 是一种应用程序向 Nacos 注册的扩展配置。它主要用于给…

python3.8安装rpy2

python3.8安装rpy2 rpy2是一个可以让r和python交互的库&#xff0c;非常强大&#xff0c;但是安装过程有些坎坷。 安装r语言 安装时首先需要安装r语言。 官网下载链接&#xff1a;https://www.r-project.org/ 选择与自己电脑相应的版本就好。 安装rpy2 然后需要安装rpy2库…

python+django电子笔记交易系统vue

编码使用python&#xff08;我的pycharm版本是2021.3.3&#xff09;&#xff0c;数据库使用mysql&#xff08;我的mysql版本5.5&#xff09;。网站点击能够跳转各个页面&#xff0c;不用部署服务器&#xff0c;本地运行即可。 题目&#xff1a;基于django的电子笔记交易系统 功…

原生canvas标签画线——直线、平行线(设置不同颜色和宽度)

1.一条直线 效果图如下&#xff1a; 代码如下&#xff1a; <!--* Author: your name* Date: 2023-05-24 17:50:28* LastEditTime: 2023-05-24 18:06:39* LastEditors: localhost* Description: In User Settings Edit* FilePath: /canvas/day01/体验canvas.html --> &l…

Hive 实现ACID

Hive官方提示&#xff0c;Hive在版本0.14之后可以支持对表数据的UPDATE和DELETE&#xff1a; 具体操作如下&#xff1a; -- 环境参数设置 set hive.support.concurrencytrue; set hive.txn.managerorg.apache.hadoop.hive.ql.lockmgr.DbTxnManager;-- 建表&#xff0c;以ORC的…

AI周报-一周发生两次Ai事件;DragGAN 问世

&#x1f680; AI 图像编辑技术 DragGAN 问世&#xff0c;用户可以通过拖拽改变汽车大小或人物表情等 近日&#xff0c;马克斯・普朗克计算机科学研究所研究者们推出了一种控制GAN的新方法DragGAN&#xff0c;用户可以通过拖拽改变汽车大小或人物表情等。 DragGAN类似于Photo…

数组的存储和压缩

数组 定义 一维数组是有限个相同类型的数据元素构成的序列&#xff0c;逻辑关系是相邻关系 推广&#xff1a;一个二维数组可以看作相同类型的一维数组的一维数组&#xff1b;n维数组可以看作以n-1维数组作为元素的线性表 性质 数组中的数据元素数目…

ASP.NET基于Ajax+Lucene构建搜索引擎的设计和实现(源代码+论文)

通过搜索引擎从互联网上获取有用信息已经成为人们生活的重要组成部分,Lucene是构建搜索引擎的其中一种方式。搜索引擎系统是在.Net平台上用C#开发的,数据库是MSSQL Server 2000。主要完成的功能有:用爬虫抓取网页;获取有效信息放入数据库;通过Lucene建立索引;对简单关键字…