C++学习之:带默认值的函数、内联函数

1.带默认值的函数

C++中,允许在定义或声明函数时,为函数的某个参数指定默认值。当调用函数时,没有为它指定实际参数时,系统自动将默认值赋给形式参数。

例如可以声明函数成:

void print(int value, int base=10); //如果后边调用print(20),相当于调用print(20,10)

需要注意几点:

  1. 缺省的函数无论有几个,都必须放在参数序列的最后,编译器一次把实际参数传给形参。没有得到实际参数的形参取它的默认值。但至少应该给出一个实际参数。如
Int SaveName (char *first, char second = “”,char *third = “”, char *fouth = “”);

     2.最好在函数声明处指定默认值,只有在函数声明处指定才有意义。因为参数的默认值是提供给函数调用者使用,编译器是根据函数原型声明确定函数调用是否合法的,所以在函数定义处指定默认值是没有意义的,除非该函数定义还充当了函数声明的作用。

     3.不同的源文件中,可以对函数的参数指定不同的默认值。但在同一个源文件中对每个函数的每一个参数只能指定一个默认值。

2.内联函数

    目的是提高执行效率,内联函数以代码复制为代价,省去了函数调用的开销,提高函数的执行效率。函数调用需要系统做一些额外的工作,如分配内存和回收内存,会影响执行时的性能。如果函数比较大,运行时间比较长,相比之下,调用时的额外开销可以忽略。但如果函数本身比较小,运行时间也很短,则调用时的额外开销就显得很客观了,使用函数就似乎得不偿失。

    编译时,编译器将内联函数的代码复制到调用处来避免函数调用。内联函数的代价是会产生函数代码的多个副本,并分别插入到每一个调用该函数的位置上,从而使生成的目标代码变长。

    在函数头部的返回类型前加一个关键字inline,就可以定义成内联函数。

#include<iostream>
inline float cube(float s)
{  return s*s*s; }
int main()
{   float side;
     cin >> side;
     cout << cube(side) << endls;
     return 0;
 }

以下情况不易用内联:

扫描二维码关注公众号,回复: 1026627 查看本文章
  • 如果函数体内的代码比较长,使用内联函数将导致内存消耗代价比较高。
  • 如果函数体内出现循环,那么执行函数内代码的时间要比函数调用的开销大。

猜你喜欢

转载自blog.csdn.net/wu_qz/article/details/80145280