内联函数是通过在编译时将函数体代码插入到函数调用处,将调用函数的方式改为顺序执行方式来节省程序执行的时间开销。
内联函数是一种用空间来换时间的方案。
定义在前,使用在后。定义时只需在函数定义的前面加上关键字inline。
例子:
#include <iostream> using namespace std; inline double CirArea(double radius) { return 3.14 *radius * radius; } int main() { double r1(1.0),r2(2); cout<<CirArea(r1)<<endl; cout<<CirArea(r1+r2)<<endl; return 0; }
同一个函数名可以对应着多个函数的实现,这些函数名是相同的,但它们呢度形参个数和类型却不同,编译器根据它们各自的实参和形参的类型以及参数个数进行最佳匹配,自动决定用哪个函数体。
例子:
#include <iostream> using namespace std; //两个都是int类型 int add(int x,int y) { cout<<"(int,int)\n"; return x+y; } //两个都是double类型 double add(double x,double y) { cout<<"(double,double)\n"; return x+y; } //x为int类型,y为double类型 int add(int x,double y) { cout<<"(int,double)\n"; return x+y; } //x为double类型,y为int类型 double add(double x,int y) { cout<<"(double,int)\n"; return x+y; } //调用 int main() { cout<<add(2,3)<<endl; cout<<add(2.0,3.0)<<endl; cout<<add(2,3.0)<<endl; cout<<add(2.0,3)<<endl; return 0; }
使用函数时,如果采用重载函数,也只是使用相同的函数名(上例中的add()函数),函数体仍然要分别定义。函数模板可以创建一个通用功能的函数,来支持多种不同形参,进一步简化重载函数的函数体设计。
注:template关键字表明的是模板;
class是类型关键字,也可用typename作为关键字。
例子:
#include <iostream> using namespace std; template<class T1,class T2> T1 Max(T1 a, T2 b) { return static_cast<T1>(a>b?a:b); } int main(void) { cout<<Max(2.3,5)<<endl; return 0; }
原文:http://blog.csdn.net/u010066934/article/details/18940653