《Effective C++》读书笔记之item30:透彻了解inlining的里里外外

来源:互联网 发布:卡洛塔妮淘宝是正品吗 编辑:程序博客网 时间:2024/04/30 19:49

1.内联函数使得对此函数的每一个调用都以函数本体替换,因而可以免除调用成本(保存寄存器并在返回时恢复,复制实参,转向新位置继续执行等)。但是同时,滥用内联函数可能会造成代码膨胀甚至导致内存不足。因此,调用频繁并且函数体较少的成员函数(或者友元函数)适合内联,而其他情况往往需要权衡得失。

内联函数的声明:在类内定义(隐喻方式)或者显式地在函数前使用inline关键字。

内联函数应该在头文件中定义:只要内联函数的定义在某个源文件中只出现一次,而且在所有源文件中,其定义必须是完全相同的,因此放在头文件中方便不容易出错。这样使得在文件中加入修改内联函数时,使用该头文件的所有源文件都必须重新编译。此时,如果换用常规函数,可能只需要将函数编译一下再连接就行了,可见是否需要使用内联是需要权衡的。

内联函数对编译器只是一个建议,各个编译器对内联函数的操作不尽相同。事实上,声明为inline的函数未必真的是一个内联函数,这取决于编译器;如果没有内联化,编译器会给出警告信息。

当用函数指针的方式调用内联函数时,该函数将被实体化(否则怎么会有地址呢?)

大部分调试器对内联函数基本无效。

PS:部分来自于《C++ Premer》第四版。

2.函数模板往往在头文件中定义,但是不能因此就把它们声明为内联——它们没有必然关系。

3.80-20经验法则:平均而言一个程序往往将80%的执行时间花费在20%的代码上面。