c语言内联函数的声明 c++内联函数定义

在c语言中内联函数有什么作用

1.内联函数可减少cpu的系统开销,并且程序的整体速度将加快,但当内联函数很大时,会有相反的作用,因此一般比较小的函数才使用内联函数.

网站建设哪家好,找创新互联公司!专注于网页设计、网站建设、微信开发、小程序设计、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了向阳免费建站欢迎大家使用!

2.有两种内联函数的声明方法,一种是在函数前使用inline关见字,另一种是在类的内部定义函数的代码,这样的函数将自动转换为内联函数,而且没必要将inline放在函数前面.

3.内联是一种对编译器的请求,下面这些情况会阻止编译器服从这项请求.

如果函数中包含有循环,switch或goto语句,递归函数,含有static的函数.

由此可以看出,内联函数和成员函数没什么区别,区别就在于怎样加快函数的执行速度而已。

关于C语言内联函数

C语言本身是不支持内联函数的,在最新的C标准C99中C语言支持了内联函数。

C++支持内联函数。

从编译器的角度:

有些C语言编译器,例如GNU C提供了内联函数的支持。

所有C++编译器都支持内联函数。

如果你的C语言编译器不支持内联函数,看看它有多古老,太古老不行(例如 Turbo C 2.0)。如果是C/C++合体编译器,那就切换到编译C++模式(例如VisualC++)。

C++中,什么是隐式内联函数?能举个例子吗

在c++中内联函数是对宏定义一种改造,因为利用内联函数取代宏定义得好处是:

1、可进行类型安全检查或自动类型转换、

例如:在c语言中,常用预处理器语句#define来代替一个函数定义。例如:

#define MAX(a,b) ((a)(b)? (a):(b))

该语句是在程序中每个出现Max(a,b)函数调用得地方,都被后面得表达式((a)(b)?(a):(b))所替代

不难发现其实对参数a,b来说都没有数据类型得定义,缺少一些安全性检查。

2、提高程序的运行效率

对于c++中一般得函数,被程序调用得时都需要为该函数开辟空间进行函数得压栈、出栈等所带来得开销,而

内联函数像宏一样被展开,调用内联函数的时候,由编译器负责把内联函数的函数体代码块替换到内联函数被调用的

地方,这一点与宏替换很相似;取消了函数参数压栈、出栈所带来的开销,从而减少了函数调用开销,提高程序得运

行效率。

所以,内联函数在项目开发中经常用到,所以关于内联函数得使用应用如下:

第一种 、内联函数得声明和函数体得定义在一起

例如:

inline int Max(int a, int b){return ((a b) ? a : b)};

第二种、c++类得成员函数也可以被定义为内联函数

class Student{

private:

int nID;

int nAge;

float fScore;

public:

void setID(int nid){ nID = nid; } //该成员函数默认自动为内联函数(隐式定义内联函数)

int getID(void){ return nID; } //该成员函数默认自动为内联函数(隐式定义内联函数)

inline void setAge(int nage) { nAge = nage; } //显式定义内联函数

inline int getAge(void) { return nAge; } //显式定义内联函数

void setScore(float fscore); //类定义体内没有声明为内联函数;

float getScore(void); //类定义体内没有声明为内联函数;

}

inline void Student::setScore(float fscore){ fScore = fscore; } //类定义体外实现为内联函数;

inline float Student::getScore(void) { return fScore; } //类定义体外实现为内联函数;

注意:(1)C++中,在类定义体内部定义了函数体的成员函数,被编译器默认为内联函数,而不管这个函数头前面是

否有关键字inline,比如:setID()、getID()、setAge()、getAge();

(2)以把实现在类定义体外部的成员函数定义为内联函数,这个时候在类定义体中只有成员函数头的声明,而

其实现是在类定义体外部,比如:setScore()和getScore();

内联函数的局限性:

1、由于内联函数与宏一样也是实现为代码替换,所以定义为内联函数的函数体不宜过大,如果函数体过

大,则某些普通的编译器就会放弃内联方式,而改用调用普通函数的方式,这样就失去了内联函数的意义了;所以,

内联函数的函数体代码不宜过大,一般就是3---4行代码即可;

2、由于内联函数是编译器在便宜阶段进行函数体展开的,所以,这就把类的内联函数的定义与实现都必须在

声明类的那个头文件中,而不能放在实现类的那个cpp文件中;这一点与模板template的特性相似


本文标题:c语言内联函数的声明 c++内联函数定义
转载源于:http://ybzwz.com/article/dosiiop.html