//内置函数,函数模版,默认参数函数
1.内置函数
调用函数时需要一定的时间和空间的开销. C++提供一种提高效率的方法,即在编译时将所调用函数的代码直接嵌入到主调函数中,而不是将流程转出去。这种嵌入到主调函数中的函数称为内置函数(inline function),又称内嵌函数(内联函数)。
在函数首行的左端加一个关键字inline即指定为内置函数.内置函数可以节省运行时间,但却增加了目标程序的长度。内置函数中不能包括复杂的控制语句,如循环语句和switch语句(其实可以包含,但是编译系统不会那样执行,因为:对函数作inline声明,只是程序设计者对编译系统提出的一个建议,也就是说它是建议性的,而不是指令性的。并非一经指定为inline,编译系统就必须这样做。编译系统会根据具体情况决定是否这样做。一般只将规模很小(5个语句以下)而使用频繁的函数(如定时采集数据的函数)声明为内置函数)
2.函数模版 template,意为模型,样板
函数模板的概念可以通过例子理解,直接看文字不容易理解:实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能。仔细看下面的例子,研究下套路
//2.1 定义模版:
template<typename T> // T是虚拟类型名,想象为 int 或 double
//可以定义很多个模版: template<typename T,typename T2,class T3>
//2.2 把T看作 double理解这个函数,再跳出来看T就轻松了!
T max(T a,T b,T c){
if (b>a) a = b;
if (c>a) a = c;
return a;
}
int main(){
int i1=185,i2=-76,i3=567;
double d1=56.87,d2=90.23,d3=-3214.78;
long g1=67854,g2=-912456,g3=673456;
int i;
long g;
double d;
cout<<(i =max(i1, i2, i3));
cout<<(d =max(d1, d2, d3));
cout<<(g =max(g1, g2, g3));
// 是不是发现了套路?
//2.3 编译系统会将函数名max与模板max相匹配,将实参的类型取代函数模板中的虚拟类型 T,相当于已定义了一个函数
3. 有默认参数函数,如果函数定义在调用之后,在声明时候指出默认参数,如果函数定义在调用之前,则在定义时指出。注意指定默认值的参数们必须放在形参表列中的最右端,一个函数不能既重载又有默认参数,可能二义。
int square(int x = 10);
cout<<square(12);
cout<<square();
//其实,刚输入squ时候,IDE就提示有俩函数,一个有参一个无参,不同的IDE可能提示的不一样
int square(int y){
return y*y;
}
// 所有用到的函数,在最前面声明,在最后面写实现,养成习惯。