网站大量收购闲置独家精品文档,联系QQ:2885784924

C语言inline函数小结.doc

  1. 1、本文档共2页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
//inline(内联)函数:将普通的函数定义为inline函数,可以避免普通函数入栈出栈的开销,它是将函数内的代码直接粘贴到调用处。除此之外,它和普通函数无异。 //要成为inline函数必须具备以下几点: //1、函数代码很短,通过不超过10行 //2、函数内不能出现循环、递归、switch...case //3、需要在编译的时候开启优化选项 -O //否则加上inline修饰,编译器也会视而不见 //强制inline宏 #define __inline __attribute__((always_inline)) //inline放置的位置只要在函数的返回值的类型前面就可,如果函数又有static修饰,放在static的前后都可 //inline在不同编译器下放置的位置导致的结果是不同的,某些编译器如果将inline放在函数的声明的前面是不被视为inline函数的,但大部分编译器对放在函数声明和函数定义的前面视为一样 内联函数与宏的区别在于:宏是由预处理器来对宏进行替代,没有语法检查、类型检查和安全检查;内联函数是通过编译器的控制来实现的,有语法检查、类型检查和安全检查;内联函数是真正的函数,而且在调用的地方,由编译器负责把内联函数的函数体代码块替换到内联函数被调用的地方,这一点与宏替换很相似;内联函数有参数,有返回值;由于内联函数可以像宏一样被展开,所以调用内联函数的时候,取消了函数参数压栈、出栈所带来的开销,从而减少了函数调用开销;这就是内联函数的优越于宏的地方; 内联函数的声明和内联函数的函数体的定义必须在一起;下面声明内联函数的语句是无效的:inline int Max(int a, int b); 而下面的内联函数的定义是有效的: inline int Max(int a, int b){return ((a b) ? a : b)}; (c 语言声明) 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; } //类定义体外实现为内联函数; C++中,在类定义体内部定义了函数体的成员函数,被编译器默认为内联函数,而不管这个函数头前面是否有关键字inline,比如:setID()、getID()、setAge()、getAge();也可以把实现在类定义体外部的成员函数定义为内联函数,这个时候在类定义体中只有成员函数头的声明,而其实现是在类定义体外部,比如:setScore()和getScore(); 即便是可以把实现在类定义体外部的成员函数定义为内联函数,那该成员函数的实现也必须写在声明类定义体的哪个头文件(.h)中,不能违反规则;即:内联函数的定义和实现都必须在同一个头(.h)文件中; 内联函数的局限性: 1、由于内联函数与宏一样也是实现为代码替换,所以定义为内联函数的函数体不宜过大,如果函数体过大,则某些普通的编译器就会放弃内联方式,而改用调用普通函数的方式,这样就失去了内联函数的意义了;所以,内联函数的函数体代码不宜过大,一般就是3---4行代码即可; 2、由于内联函数是编译器在便宜阶段进行函数体展开的,所以,这就把类的内联函数的定义与实现都必须在声明类的那个头文件中,而不能放在实现类的那个cpp文件中;

文档评论(0)

ktj823 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档