设为首页 加入收藏

TOP

4.3.2 外联的(outlined)inline
2013-10-07 15:03:02 来源: 作者: 【 】 浏览:77
Tags:4.3.2 外联 outlined inline

4.3.2  外联的(outlined)inline

那些希望减少用户代码数量的程序库设计者应该谨慎地杜绝外联的inline(指内联失败导致的结果)。记得inline关键字只是一个用于C++(www.cppentry.com)编译器的标志。当前所有的C++(www.cppentry.com)编辑器对其能够内联的函数都是有限制的。例如,某个编译器可能不能内联(inline)任何包含goto语句的函数,或者任何超过15行语句的函数;某些函数调用也是不能内联的-例如,不能内联具有递归调用的函数。我们将在下面的4.4.2节看到:大多数编译器甚至不能内联最简单的虚函数,因为当通过某个对象调用这个虚函数的时候,我们很难静态地决定这个对象的实际类型。

如果函数f被声明为内联函数,但未能在翻译单元每个调用的地方都对f进行内联扩展,那么在这些翻译单元中,许多编译器将会通过内部链接创建一份外联f函数的拷贝。如果在n个翻译单元中都创建了这样的外联拷贝,那么可执行文件将会包含n份f函数的拷贝。因此,如果程序员没有对内联函数的声明持小心谨慎的态度,那么代码的数量将会由于外联的inline而变得异常庞大。

让人觉得奇怪的是:某些具有优化功能的编译器,都很难断定某个重要函数是否需要内联。只有那些相当好的编译器,才能充分考虑函数被调用位置的上下文-而不是只局限于函数的复杂度-来判定所给函数调用是否需要内联。

程序库设计者可以使用的一个安全的方法就是:如果存在程序库用户编译器会在典型的调用位置外联f函数的可能性,那么我们就不应该把f函数声明为内联函数。而且,一个好的C++(www.cppentry.com)程序库的附加文档也会随同给出:在哪些情况下,编译器不会内联函数。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++代码设计与重用 前言 下一篇4.3.1 源文件分割

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: