原文链接:
总结:
1.内联函数最大作用就是加快代码运行速度,减少调用函数开销,但相应会使得生成的可执行文件更大一些。
2.原文没有提到一个问题,就是内联函数的声明和定义能否分别放到两个文件中。原文只是说应该将内联函数和和声明放到同一个头文件中。这一点在《c++ primer plus ++》的第15章的友元类中提到过,书中说,“也可以将定义放在实现文件中,但必须删除关键字inline,这样函数的链接性将是外部的”。我在网上看到很多人问过这个问题,但是很少有人回答。当我将内联函数的声明和定义放到不同文件中时,编译器会报找不到函数定义,我觉得这应该也能说明inline的链接性是内部的,即声明和定义应该放到一个文件中。唯一要除外的是如果内联函数是定义在主函数的文件中,声明在一个头文件中,如果该内联函数只被存在主函数的这个文件使用,则编译可以通过。
3.有一个值得注意的地方是给函数定义了内联,但编译时编译器不一定将该函数作为内联函数编译。原因是,有的编译器会检查代码的大小,当内联函数代码过大时,编译器会将内联函数视为一般的函数编译。当将递归函数定义成内联函数时,《c++ primer plus ++》中说编译器会放弃内联,而原文则提到gcc可以允许递归函数作为内联函数编译,只是会指定一个最大递归深度。具体的我也没有测试过,等学得更深入之后再分析吧。
阅读(1283) | 评论(0) | 转发(0) |