Skip to content

Latest commit

 

History

History
38 lines (24 loc) · 1.38 KB

README.md

File metadata and controls

38 lines (24 loc) · 1.38 KB

C++中的内联函数

什么样的函数是内联函数

有三种函数是内联的:

  • 被inline关键字显示声明的
  • 被constexpr修饰的
  • class/struct/union定义中出现的任何static和non-static成员函数

inline函数本身的性质

  • 可以有多个相同的内联函数定义.但定义要出现在不同的编译单元,并且完全相同.
  • 使用了内联函数的编译单元,必须含有内联函数的定义

这样的性质很麻烦,所以一般只有一个在头文件中的定义.

inline函数中的变量性质

  • inline函数中的static variable被所有编译单元共享
  • inline函数中定义的类型(typedef)也被共享

inline函数的执行方式

inline本来是向编译器申请,把原本的函数调用,直接展开成相应的函数体代码去执行,从而避免函数调用引起的开销.比如栈,寄存器状态.

但是,标准把选择权交给了编译器.只要在执行时符合前小节提到的性质就行,无论是不是真的把函数展开.

编译器也可以选择把某些非内联函数展开,这取决于编译器的优化策略.