Chinaunix首页 | 论坛 | 博客
  • 博客访问: 302594
  • 博文数量: 82
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 490
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-13 10:58
文章分类

全部博文(82)

文章存档

2018年(2)

2017年(9)

2016年(71)

我的朋友

分类: C/C++

2016-09-21 23:23:29

原文链接
总结:
 1.内联函数最大作用就是加快代码运行速度,减少调用函数开销,但相应会使得生成的可执行文件更大一些。

 2.原文没有提到一个问题,就是内联函数的声明和定义能否分别放到两个文件中。原文只是说应该将内联函数和和声明放到同一个头文件中。这一点在《c++ primer plus ++》的第15章的友元类中提到过,书中说,也可以将定义放在实现文件中,但必须删除关键字inline,这样函数的链接性将是外部的。我在网上看到很多人问过这个问题,但是很少有人回答。当我将内联函数的声明和定义放到不同文件中时,编译器会报找不到函数定义,我觉得这应该也能说明inline的链接性是内部的,即声明和定义应该放到一个文件中。唯一要除外的是如果内联函数是定义在主函数的文件中,声明在一个头文件中,如果该内联函数只被存在主函数的这个文件使用,则编译可以通过。

 3.有一个值得注意的地方是给函数定义了内联,但编译时编译器不一定将该函数作为内联函数编译。原因是,有的编译器会检查代码的大小,当内联函数代码过大时,编译器会将内联函数视为一般的函数编译。当将递归函数定义成内联函数时,《c++ primer plus ++》中说编译器会放弃内联,而原文则提到gcc可以允许递归函数作为内联函数编译,只是会指定一个最大递归深度。具体的我也没有测试过,等学得更深入之后再分析吧。
阅读(1236) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~