内联、宏与普通函数
1、普通函数的特点:
函数使用可以避免相同代码重复写几次的麻烦,同时减少可执行程序的体积,但同样会造成程序运行时间的开销。如果一个函数内部语句较少,执行时间非常短,函数调用产生的额外开销和函数本身执行时间相比难以忽略,将该函数在循环体内执行若干次造成的时间开销会使得程序运行明显变慢。
2、内联函数的特点:
内联函数是函数声明和函数定义前加上关键字“inline”,通常函数定义占用一行时可以考虑内联函数。内联函数与普通函数的区别在于编译器处理调用内联函数的语句时不会将该语句编译成函数调用的指令,而是直接将整个函数体的代码插入调用语句处,就像整个函数体在调用处被重写了一遍一样。内联函数能够实现调用函数一样重复使用一段代码,虽然会使最终可执行程序的体积增加,但解决了频繁调用函数大量消耗栈空间的问题,中心思想是以空间换时间。
在类和对象定义中,定义在类中的成员函数默认内联,如果在类中未给出成员函数的定义,在类外要加上inline,否则会认为不是内联的。inline只是给给编译器建议,能否内联取决于编译器本身。
//内联函数可以放在头文件中
class Person
{
public:
int m_age;
void setAge(int age);
}
//定义内联函数
inline void Person::setAge(int age){m_age = age}
3、宏与内联的区别:
宏是用预处理语句#define进行,其主要通过文本替换方式实现;内联主要通过值传递方式实现。
#include <iostream>
using namespace std;
const int max(int,int);
#define MAX(a,b) a>b?a:b
int main(void)
{
int a = max(10,25);
cout << a << endl;
int b = MAX(25,35);
cout << b << endl;
system("pause");
return 0;
}
inline const int max(int a,int b)
{
return a>b?a:b;
}