博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++函数基础知识
阅读量:5104 次
发布时间:2019-06-13

本文共 1619 字,大约阅读时间需要 5 分钟。

【这里只是记录一些比较容易忽略的知识点。】

内联函数

内联函数的出现,解决了两个技术问题。

1.当函数需要频繁调用,且函数体较短时,调用函数的开销(保存现场与返回地址)比函数本身的价值相比性价比不高。这时使用内联函数,直接把函数体嵌入到相应的代码位置,更有优势。

2.其实宏定义(#define)也可以解决1中的问题,但是宏定义往往在传递参数时会让人迷惑。不利于代码维护,阅读。内联函数能解决宏定义带来的不确定性。

内联函数的定义形式

inline 类型标示符 函数名(参数列表){函数体};

使用内联函数注意事项

对于一个函数来说,是否是内联函数,是由编译器决定的。如果我们在函数面前加上inline关键词,只是表示,建议该函数为内联函数。至于最终会不会成为内联函数嵌入到代码中,还是有编译器决定的。至于怎么决定,取决于以下几点。

1.内联函数不能有循环,和switch语句

2.内联函数不能是递归函数

总的来说,内联函数应该是短小简单的函数。对于编译器来说,它就是代码,如果过于复杂反而会造成代码膨胀,与函数的作用相反。PS:若写内联函数时不遵从以上的两点要求,编译仍然可以通过。但是编译器会将其转化为一般函数。

最后举个内联函数的栗子(仅供参考)

#include 
using namespace std;inline void neilian(){ cout<<"nei lian han shu "; }int main(){ neilian(); return 0; }

 重载函数

编译器区分重载函数,是判断参数个数,以及参数类型进行的。与参数名,返回类型无关。

另外在调用函数之前,必须先声明函数原型。

下面是个小李子

#include 
using namespace std;int main(){ int nihao(int& a); int nihao(); nihao(2); nihao(); getchar(); return 0;}int nihao(int& a){ cout<<"这是有参数的你好"<

其实重载函数真正实现的时候,你还是要写出具体的函数实现过程。只是相对于重新创造个新的函数来说,可以不用记住那么多函数名。并且,这样有利于函数接口的统一管理。如果出现了这种情况:现在要一个求绝对值的函数。我们发现,他们的逻辑是一样的,既先判断正负,若为正既输出,若为负取相反数输出。各种类型的数据都要有自己相应类型的函数,这时使用重载可以解决问题,但是有没有更好的解决方法呢?请看下面的函数模板。

函数模板

模板的定义方式

template <typename 标识符>

函数定义 

这是个小栗子

#include 
using namespace std;template
T modu(T a){ return a<0?-a:a;}int main(){ int a = -2; float b = -1.5f; cout<
<

 在需要某种函数的时候,编译器将自动根据模板生成该种函数。当然这种自动也可以变成“手动”。

还是上面小程序来做例子

 

//假如是double的时候,我要变成去绝对值之后+1。我就要用到手动具体化了temlpate <>double modu(double a){  return (a<0?-a:a)+1.0;} //当使用double型数据时,将自动屏蔽之前的模板,而使用这个定义。其他数据类型则不变

 

PS:函数的重载与函数模板都是编译时多态的体现。

 

 

 

转载于:https://www.cnblogs.com/CAION/archive/2012/12/23/2829931.html

你可能感兴趣的文章
[转]: 视图和表的区别和联系
查看>>
Regular Experssion
查看>>
python中的字符编码
查看>>
图论例题1——NOIP2015信息传递
查看>>
uCOS-II中的任务切换-图解多种任务调度时机与问题
查看>>
CocoaPods的安装和使用那些事(Xcode 7.2,iOS 9.2,Swift)
查看>>
Android 官方新手指导教程
查看>>
幸运转盘v1.0 【附视频】我的Android原创处女作,请支持!
查看>>
UseIIS
查看>>
为什么int型最大的数是2147483647
查看>>
数据库连接的三层架构
查看>>
集合体系
查看>>
vi命令提示:Terminal too wide
查看>>
nyoj 5 Binary String Matching(string)
查看>>
引用 移植Linux到s3c2410上
查看>>
BizTalk 2010 单机安装
查看>>
人与人之间的差距是从大学开始的
查看>>
vue 开发过程中遇到的问题
查看>>
5.13日日常记录
查看>>
25.openssl编程——证书申请
查看>>