函数介绍(内联函数和函数重载)

C++ 内联函数 函数重载 内联函数是C++性能优化工具箱中的双刃剑:正确使用时可提升5%-15%关键路径性能,滥用则导致代码膨胀和缓存失效。建议结合现代编译器的诊断工具(如GCC的-Winline),在性能需求与代码可维护性之间寻找平衡点。对于高频调用的微操作,内联仍然是无可替代的底层优化手段。函数重载是C++实现静态多态性的核心机制,通过灵活的参数匹配提升代码可读性和接口简洁性。合理使用时需注意避免歧义调用,并理解编译器匹配规则。 阅读详情

1.内联函数

2.函数重载

重载概念:同一个标识符在不同的上下文有不同的意义;
函数重载:
–同一个函数名定义不同的函数;
–当函数名和不同的参数搭配时,表达的意思也不同;
–由函数名和函数参数列表决定的,与返回值无关系;
函数重载至少满足以下条件:
–参数个数不同
–参数类型不同
–参数顺序不同
编译器调用函数重载时的原则:
①将所有同名函数作为候选者
②尝试查找可行的候选函数(以下几种同时进行)
–通过函数名精确查找;

#include <iostream>
int func(int a, int b)
{
     return a + b;
}

int gunc(int a, int b)
{
     return a + b;
}

int main()
{
    func(1,2);            //根据函数名精确查找
    return 0;
}

–通过默认参数能够匹配实参;

#include <iostream>
int func(int a, int b, int c)
{
     return a + b;
}
int func(int a, int b)
{
     return a + b; 
}

int main()
{
    func(1,2);            //前两个参数匹配后,编译器还会尝试补充一个默认参数看是否有匹配
    return 0;             //项,如本例匹配到存在函数有默认参数c,则编译不通过,二次定义
}

–通过默认类型能够转换实参;

#include <iostream>
int func(int a, int b, int c)
{
     return a + b;
}
int func(int a, int b)
{
     return a + b;
}
int main()
{
    func('a',2);            //编译器匹配无字符类型参数后,会尝试将字符类型转换为int型匹配
    return 0;              //其余的函数;    
}

③匹配失败
–最终寻找到的可行候选函数不唯一,具有二义性;
–所有的候选参数皆不匹配,函数未定义;
函数重载与函数指针
–当使用重载函数名对函数指针进行赋值时
–根据重载规则挑选与函数指针参数列表一致的候选者;
–严格匹配候选者的函数类型与函数指针的函数类型;

#include <iostream>
int func(int a)
{    
    return a;
}
int func(int a, int b)
{
    return a + b;
}
int func(const char *a)
{
    return strlen(a);
}
typedef int(*Punc)(int a);

int main()
{
   Punc p = func;
   int c = p(1);      //调用func(int a)
   printf("c = %d\n", c);
   return 0;    
}

3.C与C++相互调用

C++编译器优先使用C++方式进行编译,利用extern关键字强制让C++编译器用C的方式去编译;

格式:extern "C"
{ 

}

#ifdef __cplusplus          //C++内置的宏,只要是C++编译方式就有这个宏,实现C和
extern "C"                     //C++皆可以编译该文件
{
} 
#endif
ISNULL()、NVL()、IFNULL() 和 COALESCE() 函数 ISNULL()、NVL()、IFNULL() 和 COALESCE() 函数的几种用法, 立即下载

相关推荐

注册“Oracle Provider for OLE DB”和创建链接服务器

注册“Oracle Provider for OLE DB”和创建链接服务器 在sql server 数据库上创建链接服务器,连接oracle数据库,访问接口需要设置为:“Oracle Provider for OLE DB”。 如果电脑上没有这个驱动,安装一个完整的Oracle11gR2程序是一个有效的方法,但这个64位版本的安装包有2个多G, 相当庞大,如果仅仅...

weixin_30760895的博客 2383

被重载的函数缺少上下文信息是啥意思

重载的函数缺少上下文信息意味着在程序中重载的函数在调用时无法确定使用哪个函数版本,因为它缺少必要的上下文信息来确定。这可能是由于函数调用时参数类型不正确,或者是在编译时缺少必要的类型信息。这种情况下,编译器可能会生成一个错误或警告,指出函数调用无效。 ...

weixin_42588672的博客 302

【C语言项目合集】这十个入门必备练手项目,让C语言对你来说不再难学!

适合刚入门C语言的编程学习小白的十个练手项目,每个都很经典且实用,让你学完C语言不再迷茫!

kxtxdy的博客 3万+

error: overloaded function with no contextual type information

今天改进opencv的霍夫变换时遇到的 error: overloaded function with no contextual type information 查了之后才发现是自己定义了一个 int max=0; 和opencv自带的函数max重名了,所以才会报错: 错误:没有上下文类型信息的重载函数 还有几个: 1.   error: refere

The Dawn 8411

修改注册表导致开机时电脑显示“无法登陆到你的账户”的问题解决方案

1.问题描述:开机电脑显示“无法登陆到你的账户:通常可以通过从你的账户注销,然后重新登陆来解决问题,如果不立即注销,你创建的任何文件或进行的任何更改都将会丢失。” 2.问题原因:想要修改cmd中的用户名(红色部分),修改了注册表,重启时出现问题。 3.问题解决: win+R输入cmd,确定进入注册表界面,将下面的地址复制进地址栏(你也可以自己按目录查找),双击ProfileImage...

qq_33835957的博客 7万+

金蝶K3系统物料主数据后台表对应字段一览

我们说到物料表,一般是指t_icitem,但正确的说t_icitem并不是一张有,而是一张视图,不过我们对于数据库物料表中的大部分操作,都是通过此视图来完成。比如经常通过此视图,来成批修改数量,单价精度,是否启用批次等一些字段,有的时候,对于账套已经启用,并且已经有业务发生的物料,有一些关键属性也需要通过修改物料表t_icitem来进行。 当然修改的时候,需要考虑一些前提条件的。 比如说我有一个客户新建的账套,在月底结账时发现,要改一种成本核算方法,启用时用的是加权平法,现在想改成移动平均法,这样的情况,

hzfw2008的博客 1万+

SQL学习之ucase()函数

目录学习源SQL ucase() 函数示例数据基本使用 学习源 简单教程 https://www.twle.cn/l/yufei/sql/sql-basic-func-ucase.html 菜鸟教程 https://www.runoob.com/sql/sql-func-ucase.html SQL ucase() 函数 SQL 中的 ucase() 函数把字段列中的小写值转换为大...

爱喝水的qdy的博客 790

SAP成本计划BAPI接口BAPI_COSTACTPLN_POSTPRIMCOST深度解析与实战指南

在SAP ERP系统中,成本计划是财务与控制模块的核心功能,它涉及对企业未来成本支出的预测与规划。其原理是通过结构化数据模型,将成本要素分配到具体的成本对象上,以实现预算编制和成本控制。这一技术的核心价值在于实现成本数据的标准化、自动化处理,从而提升财务流程效率与数据准确性。在应用场景上,成本计划广泛应用于年度预算编制、项目成本预测、系统间数据集成以及历史数据迁移等关键业务环节。本文聚焦于实现上述流程自动化的关键技术——SAP标准接口BAPI_COSTACTPLN_POSTPRIMCOST,并深入探讨其在高

weixin_29657209的博客 350

sql的coalesce函数用法

coalesce函数是sql里面极其实用的一个函数,具体用法如下: SELECT coalesce(exp1,exp2,...) as info FROM table1 当exp1为NULL时,计算exp2,当exp2为空时,计算exp3,…… 一直到计算到第一个不为NULL的exp,如果都为NULL,则返回NULL 他其实可以用另一种方式来等价,当只有两个表达式时: SELECT exp1 FROM table1 WHERE exp1 is not null UNION SELECT exp2 FROM

yichao0630的博客 2万+

手把手教你在ARM64架构下编译和部署Milvus:从环境搭建到Docker镜像制作全攻略

本文详细介绍了如何在ARM64架构下编译和部署Milvus,包括环境搭建、源码下载与编译、Docker镜像制作等关键步骤。通过本文的方法,您可以快速构建适用于ARM64设备的Milvus编译环境,并解决常见的编译错误。同时,还提供了基于Docker Compose的测试方法,帮助用户高效地完成向量数据库的部署与应用。这是一次深入探索开源AI工具的实用指南,为开发者在多种硬件架构上的创新应用提供了强有力的支持。

小盒子的博客 1266

华为OD机试 - 报文响应时间 - 贪心算法、位运算(Python/JS/C/C++ 2024 E卷 200分)

贪心算法是在每一步选择中都做出当前最优的选择,期望通过局部最优解推导出全局最优解的算法。

学Java,找哪吒 1757

Oracle 函数大全

建议使用CTRL + F精确搜索 F.1字符函数——返回字符值 (chr,concat,initcap,lower,lpad/rpad,nls_initcap,nls_lower,nls_upper,regexp_replace,regexp_substr,replace, trim/ltrim/rtrim,soundex,substr,translate,upper)

基于Oracle11G 6969

RK平台PCIE-Ethernet扩展:Intel I210移植与性能飞升之路

本文详细介绍了Intel I210千兆以太网控制器在瑞芯微RK平台的移植与优化过程。通过硬件适配、内核配置、驱动开发及性能调优四个关键环节,实现了RK平台的网络性能提升。硬件方面,重点说明了PCIE接口的规范连接与供电检查;软件方面,系统阐述了内核配置、设备树修改和驱动编译流程。在性能优化环节,详细介绍了中断优化、缓冲区设置和TCP/IP协议栈调优策略,并采用Iperf和Netperf工具进行量化测试验证。测试结果显示,优化后的网络吞吐量提升20%以上,延迟降低40%,为工业控制、智能安防等场景提供了可靠的

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 350

内联函数、带默认形参值的函数、引用传参以及函数重载的具体介绍和例子

使用函数有利于代码重用,可以提高开发效率,增强程序的可靠性,也便于分工合作,便于修改维护。但是,函数调用也会降低程序的执行效率,增加时间和空间方面的开销。因此对*一些功能简单、规模较小又使用频繁的函数,可以设计为内联函数。内联函数不是在调用时发生控制转移,而是在**编译时将函数体嵌入在每一个调用处。这样就节省了参数传递、控制转移等开销。 内联函数的定义与普通函数的定义方式几乎一样,只是需要使用关键字inline,其语法形式如下:

m0_61988812的博客 1536

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【C++要哮着学】初识C++,函数重载、引用和内联函数

主要聊聊C++的函数重载、引用和内联函数

2301_78190552的博客 1364

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【C++专栏】C++入门 | 函数重载、引用、内联函数

函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型不同的问题。 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间 内联函数:以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序运行的效率。

小黄鸭的博客 1466

内联函数和重载函数

开发工具与关键技术: Visual Studio / C++ 作者:何文涛 撰写时间:2019-5-2 内联函数: 内联函数是C++语言为降低小程序用开销而采取的一种机制。 定义内联函数的方法是,在函数名第一次出现时,在函数名之前冠以关键字inline。通常在函数原型中指定。若已在函数原型中指定inline,则函数定义时不能重复给出。 内联函数原型为:inline 类型 函数名,形式参数表; 内...

weixin_44549626的博客 1625

C++基础:函数重载,引用,内联函数

C++在C语言的基础上增加和完善了许多功能,其他的实用功能就需要我们在往后的学习中体会到了。

x181018863的博客 1496

内联函数和函数重载

内联函数·函数调用是有时间开销的。如果函数本身只有几条语句,执行非常快,而且函数被反复执行很多次,相比之下调用函数所产生的这个开销就会显得比较大。·为了减少函数调用的开销,引入了内联函数机制。编译器处理对内联函数的调用语句时,是将整个函数的代码插入到调用语句处,而不会产生调用函数的语句。·在函数定义前面加" inline "关键字,即可定义内联函数inline int Max(int a, int...

Mosu_的专栏 582

引用,重载函数,内联函数

内联函数。

2302_79281982的博客 1987

C++基础知识(三:哑元和内联函数和函数重载)

如果对于大型的程序,对某个功能进行更新,有需要保证代码的向下兼容(前面版本的代码仍然可以使用),就可以给某些参数设定为哑元。在定义函数时,某一些形参有默认值,如果调用时有实参传过来,就使用实参的值,如果调用时,没有给该参数传参,参数就使用默认值。同样的传参个数,既能满函数重载的需要,也能满足默认参数的需求,在调用时就会发生混乱,函数重载和默认参数不要同时出现。如果某一个参有默认参数,那该参数右侧的所有参数一定也有默认参数。函数中,某个参数只有数据类型,没有变量名,此刻该参数,就是哑元。

LKHzzzzz的博客 665

C++学习-01<函数重载、内联函数 & inline 、constexpr>

——学习笔记,有错误请指出。

Gnar_w的博客 1212

C++基础入门(二)(函数重载,引用,内联函数,nullptr)

引⽤不是新定义⼀个变量,⽽是给已存在变量取了⼀个别名,编译器不会为引⽤变量开辟内存空间,它和它引⽤的变量共⽤同⼀块内存空间。就像人会有小名一样,例如张三,他的家人可能平时叫他小三,虽然称呼不同,但都是叫的张三这一个人类型& 引用别名 = 引用对象C++中为了避免引入太多运算符,会复用C语言的一些符号,比如前面的,这里引用和取地址使用了同一个符号,注意使用方法区分即可。//bb和cc是aa的别名。

m0_68142120的博客 1199

bool,内联函数,函数重载,函数参数缺省,引用

c语言中是没有bool类型的 一:bool 类型是一种数据类型 取值范围只有true(真) 和false(假) Bool类型的变量在内存中只占一个字节(注意是bool类型的变量,因为本身类型是不占内存的) 定义:不论是c 还是c++,定义变量都是类型名加变量名: bool is _live; 注意事项:虽然BOOL类型的取值范围只有true 和false 等,但是也是可以赋什么表达式之类的,bool类型的赋值不仅只可以是true和false,但是要记住非0为真 用代码解释一下: #include<st

m0_65334415的博客 989

【C++】C++入门基础,详细介绍命名空间,缺省参数,函数重载,引用,内联函数等

命名空间,缺省参数,函数重载,引用,内联函数,auto,范围for,nullptr

林宇恒的博客 2760
上一篇: C++中类型强制转换
下一篇: C++ 生成随机数 srand()和rand()
照书抄代码
博客等级 码龄8年 32粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值