程序猿c++(5) 函数

  • A+
所属分类:C++

同名函数

参考同名函数

内联函数

  • c++在调用函数时会产生额外的开销,如将函数参数push进栈、将函数返回地址push进栈、准备被调用函数的返回值、将所有在函数调用期间push进栈的数据pop出来,可以采用内联函数(inline function)来减少这些开销,内联函数将函数的代码嵌入到调用处,并保持函数的独立性(函数的独立性指的是什么?指的是函数有自己的空间,有自己的本地变量,这些本地变量在进入函数的时候生成,return的时候销毁,还有调用函数的时候对参数的检查等等)
  • 在函数声明和函数定义的地方必须都要对函数添加inline关键词修饰
  • 内联函数会在编译时候嵌入内嵌函数的代码,而不是在运行时候,而普通函数的调用过程发生在运行时候,函数调用的额外开销也就发生在运行时候,因此,相比较普通函数,内联函数的运行速度更快。
  • 因为内联函数要在调用点展开,所以调用内联函数的文件中必须包含内联函数的定义,编译器必须随处可见内联函数的定义,要不然就成了非内联函数的调用了。所以,这要求每个调用了内联函数的文件都出现了该内联函数的定义。所以,inline函数的定义最好放在头文件中,不要放在.cpp文件里
  • 编译器可能会拒绝将递归函数、函数体非常大的函数定义成内联函数;如果函数体很小,可能自动被编译成内联函数
  • 类声明时(一般类声明在.h文件中),如果在声明类的时候直接给出函数的函数体,那么这些函数直接被编译器当成内联函数

 

什么时候使用inline?

  • 如果函数体很小,可以做成inline
  • 如果是被频繁调用的函数(例如for循环中的函数),可以做成内联函数

 

什么时候不能使用inline?

  • 函数体超过20行,不建议使用
  • 递归函数不建议使用

 

Qt大课堂-QtShare

发表评论

您必须登录才能发表评论!