`
codepeak
  • 浏览: 31959 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
社区版块
存档分类
最新评论

内联函数

阅读更多
       在C++中,宏的概念是作为内联函数来实现的。
       内联函数无论从哪方面说都是真正的函数,唯一不同之处在于内联函数在适当的地方像宏一样展开,所以不需要函数调用的开销。因此,应该(几乎)永远不要使用宏,只使用内联函数。
       任何在类中定义的函数(不包括在类中声明,在类外定义的成员函数)自动地成为内联函数,但也可以在非类的函数前加上inline关键字使之成为内联函数。但为了使之有效,必须使函数体和声明结合在一起,否则,编译器将它作为普通函数对待。

原理:
       一般应该把内联定义放在头文件里。当编译器看到这个定义时,它把函数类型(函数名+返回值)和函数体放到符号表里。当使用函数时,编译器检查以确保调用是正确的且返回值被正确使用,然后将函数调用替换为函数体,因而消除开销。
       内联代码的确占据空间,但假如函数较小,这实际上比为了一个普通函数而产生的代码(参数压栈和执行CALL)占用的空间还要小。
       使用内联函数的目的是减少函数调用的开销,但是假如函数较大,由于在每处调用的地方都有复制代码,将使得代码膨胀。

限制:
       1. 假如函数太复杂,编译器将不能执行内联,这取决于编译器。
       2. 假如要显式地或者隐式地取函数地址,编译器也不能执行内联。

为了保持接口清楚,所有的方法最好都在类外面定义,这并不妨碍最优化,对适合内聚的函数使用inline即可。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics