C++知识点6——函数

我努力奔跑证明我还活着。


函数

一些简单的声明函数的语法就不在这里赘述了。

内联函数

内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处。
这样可以节省参数传递、控制传递等开销。
语法:

1
2
3
inline 类型说明符 函数名 (含类型说明的形参表){
函数体
}

内联函数足够的简单,足够简单的定义:

  • 没有循环和switch case语句
  • 不能写函数原型,要一次写出
  • 内联函数内部不能有异常处理(例如:传输过程中断电,使过程不能完成)

带默认形参值的函数

函数在定义时可以预先声明默认的形参值。
注意:

  • 有默认形参值的形参必须在形参列表的最后(即在有默认形参值的右边,不能出现无默认值的形参)
    因为在函数调用中,实参和形参是按照从左向右的顺序建立对应关系的。
  • 在相同的作用域中,不允许在同一个函数的多个声明中对同一个参数的默认值重复定义,即使前后的值相同也不行。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int add(int x=5,int y=6);
    int main(){
    add();
    return 0;
    }
    int add(int x,int y){
    return x+y;
    }
    //int add(int x=5,int y=6){}这样不对,不能再声明了

函数重载

因为在多态那一节讲过了重载,所以就不在这里赘述了。

函数原型声明过程中的操作

1
2
int f(int ,int);//可以不用形参名字
int f(int x,int y);/*形参的名字可以是任意的,只要符合标识符的规则*/

注意的点

  • c++程序由函数组成
  • 内联函数并不一定必须要inline关键字来定义,比如类内的函数默认是内联函数(如果足够简单)
  • 内联函数是通过编译器来实现的
  • 题目中如果说是函数原型,最后一定要有分号,如果不是函数原型最后一定是无分号的,做题时注意区分。
    例如:

    1
    2
    int f(int x,int y);//函数原型
    int f(int x,int y)/*这个就不是函数原型,在选择中会遇到这种题目*/
  • 在函数重载的过程中与函数的类型(即返回值类型)

    函数的值传递

  • 形参只能变量
  • 实参可以为变量也可以为常量
  • 实参必须与形参匹配:个数、类型。如果不匹配就转化为形参的类型。