内联 inline 是个修饰符,用来修饰体积不大又调用频繁的函数,可以减小函数调用的开销。
所谓减小开销,就是在编译时把函数体的代码嵌入进去,达到和宏类似的效果,这样程序在运行到该函数时,就不需要在频繁的跳转中消耗栈的空间。
从经验上来说,函数体在10行以内,执行逻辑极其简单(写值,简单的判断和计算等),调用又十分频繁,尤其是一些工程代码中会放在周期循环里一直跑的,联系到其它模块的函数,就可以写成内联函数。
格式:inline + <函数头>
在函数头前面加上个inline就行,但有一点要注意,inline修饰的函数要当场给出其原型。inline只是修饰符,不能用作声明。
下面写法是不允许的:
inline int max(int a,int b); int max(int a,int b) { //...... }
下面写法是允许的:
int max(int a,int b); inline int max(int a,int b) { //...... }
内联函数无法使用for,while,switch语句。
慎用内敛函数,除非它足够简单。最好把它们统一写到一个头文件里使用。
class Person { public: Person(const string &name) { Name = name; } void printName()//printName 定义在类里面是隐式内联函数 { cout << Name << endl; } private: string Name; };
class Person { public: Person(const string &name) { Name = name; } inline void printName();//成员被函数前加了inline是显式内联函数 //在类里面显式声明 private: string Name; }; void Person::printName() {//在类外面定义 cout << Name << endl; }
class Person { public: Person(const string &name) { Name = name; } void printName(); //在类里面没有显式声明 private: string Name; }; inline void Person::printName()//成员被函数前加了inline是显式内联函数 {//在类外面显式定义 cout << Name << endl; }
常见的成员函数不是内联函数定义不再类里面,且声明和定义都没有inline.