- 前言
- 函数使用
- 函数声明(函数原型)
- 函数定义
- 函数调用
- 函数参数,按值传递
- 传值
- 传址
- 函数与数组
- 函数与字符串
- 函数与结构体
- 默认参数
- 内联函数
本片继续学习C++,函数。
函数使用函数是C++的基本编程模块,以便于程序的模块化和代码复用。
函数声明(函数原型)要使用函数,首先要提供函数原型,即声明函数,格式为 TypeName FuncName (Parameters)
即 返回值类型 函数名 (参数列表)
函数原型为编译器提供了函数名,函数返回值类型,参数类型和数量,用以编译器检查和处理。下面是一个函数声明的例子:
int func1(int a, int b);
上面这个函数声明了一个fuc1函数,它依次接受两个int类型的参数,返回int类型。
函数声明中的参数名可以省略,上面的函数声明等价于:
int func1(int, int);
C++中,如果向函数传递了不同类型的参数(可转换),将强制转换为期望的类型;如果返回值与返回类型不相同(可转换),则强制转换为返回类型:
int func1(int a, int b) {
return a + b;
}
std::cout a = 1;
*st.a = 1; // equal
}
注意:传结构体的指针时,实参指向的结构体就能够被形参修改。
默认参数C++中,函数可以设置默认参数,在函数声明时设置:
int newFunc(int a, int b, int threshold=5);
上面的函数,可以只提供参数a,b的值,而省略传递threshold的值,这样函数会使用threshold的默认值5,如果提供threshold的值,就会覆盖默认值。
注意1:函数声明时,带默认值参数的右边的参数必须都带参数值。下面的函数声明将报错:
// int newFunc(int a, int threshold=5, int b) // error!
注意2:函数声明和定义中,只有一个需要带默认值,两个都带默认值就会报错。建议只在函数声明时加入默认值。
注意3:即使函数带了默认值,仍然是根据参数个数从左往右一个一个传值的,不能跳过某个默认参数。
内联函数内联函数是C++提高程序运行速度的一种方式。
程序运行时,操作系统把程序的二进制机器指令加载到计算机内存中运行,因此每条指令都有特定的内存地址。函数调用时,程序存储调用指令的地址,然后跳转到函数的内存地址,执行函数,然后跳回调用指令的位置。
关键字inline
把函数设定为内联函数。内联函数在编译时,不会被编译成函数被调用的指令,而是直接把内联函数体嵌入到调用处,类似于把函数在嵌入处重写。因此,内联函数在运行时,没有一般函数的跳转操作。
因此,内联函数的运行速度比常规函数快,但是内存占用多。如果有10个地方使用了内联函数,那么这个程序就有10个内联函数的代码块。
一般把内联函数的声明与定义结合,放在.h文件里:
inline int newFunc2(int a, int b) {
return a + b;
}
一般来说,功能简单(代码短),使用次数多的函数更适合作为内联函数;代码比较长,内含循环之类的就不适合。
此外,内联函数不能递归。