函数重载和内联函数
函数重载
-
C++可以使用同名函数[重载函数]实现功能类似的多个不同函数.
-
函数名重载:
函数名相同,
但是, 函数的参数(形参)绝不相同:
-
参数个数不同
-
或参数个数相同, 但是参数的类型不同
只有返回类型不同,不能构成函数重载
只有形参变量名不同, 不能构成函数重载.
注意: C语言不支持函数重载
-
-
示例:
#include <iostream>
using namespace std;
int add(int a, int b) {
return a + b;
}
float add(float a, float b) {
return a + b;
}
int main(void) {
int a1 = 1, b1 = 2;
float a2 = 1.0, b2 = 0.2;
cout << add(a1, b1) << endl; //调用int add(int a, int b)
cout << add(a2, b2) << endl; //调用float add(float a, float b)
return 0;
}
函数的栈空间
-
要避免栈空间溢出。
当调用一个函数时,就会在栈空间,为这个函数,分配一块内存区域,
这块内存区域,专门给这个函数使用。
这块内存区域,就叫做“栈帧”。
#include <iostream>
#include <Windows.h>
void test(void) {
//运行时将因为栈帧空间溢出,而崩溃
char buff[2000000];
std::cout << (int)buff[sizeof(buff) - 1] <<std::endl;
}
int main(void) {
test();
system("pause");
return 0;
}
内联函数
-
函数的作用:
避免重复制造轮子。 (避免重复多次写相同的代码)
函数的缺点:
每调用一次函数,就会为这个函数分配一个“栈”, 在计算机底层做很多准备工作(保护原来的执行环境,切换到新的执行环境) 有一定的“时间开销”
解决方案:
使用内联函数
内联函数:
当编译器在编译时, 如果遇到内联函数, 就会直接将整个函数体的代码插入”调用处”, 就相当于内联函数的函数体, 在调用处被重写了一次。 以避免函数调用的开销, 获得更快的时间。
内联函数的缺点:
使调用内联函数的程序,变得“臃肿”,消耗调用函数的“栈”空间。
内联函数的用法:
inline int add(int a, int b) { return a + b; }
内联函数的使用场合:
1)内联函数中的代码应该只是很简单、执行很快的几条语句。 2)这个函数的使用频度非常高,比如在一个循环中被千万次地使用。 数的定义(即整个数体),而不能只出现内联函数的声明。