posts - 225, comments - 62, trackbacks - 0, articles - 0
   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

保守地使用inline

Posted on 2006-05-16 20:28 魔のkyo 阅读(434) 评论(0)  编辑 收藏 引用 所属分类: Programming

作者:ZDNetChina
2004-02-0511:19AM 

在早期的C++中,inline关键字通常被认为是劝说程序员使用setters和getters代替直接访问数据成员的一种方式。今天,大多数的编译器都比一般程序员更加清楚什么函数更适合inlining。此外,inline的使用可以导致繁重的维护问题,敏感的bugs和无用功。

一个典型的函数由一行代码组成。定义它inline在开始的时候感觉很合理:

classFile
{
public:
intget_descriptor()const;
//..
private:
int_fd;
//..
};

inlineintFile::get_descriptor()const
{return_fd;}//fine,aslimfunctionbody

考虑到由于设计的改变,移动到新的系统或者OS中等等,get_descriptor()现在包含的15行代码。很显然,不能再定义inline。那么,维护者会记得将inline从这个函数的定义中移动吗?

Inline和静态连接

另外一个问题在被代码库使用的inline函数中浮现。许多程序库使用的是静态连接,库会在没有终端用户改变他们的程序的情况下进行代码改变。但是,如果一个inline函数的改变将不能维护二进制文件的兼容性,在这种情况下,用户必须重新编译他们的代码。就是说,例如一个exe使用到了一个lib,lib在保持所有接口含义的情况下改变了实现方法,如果应用的代码没有任何变化那么只需要用新的lib重新link即可,但是如果lib中有inline函数而inline函数发生了变化,那么exe不得不重新编译,这有悖lib的意义,而且容易引起因编译器检查错误而遗漏重编。

Inline使用规则

使用inline的危险超过了它的好处,如果你的代码需要被优化,通常使用专业的模型来优化他们。使用inline仅仅是代码部分需要被优化的时候,并且你发觉只有inline才可以改变它们的性能时才使用。除此之外,避免使用inline。

本文作者:DannyKaley是一个有着14年丰富经验的系统分析师和软件工程师。他擅长C++和面向对象的程序设计。

只有注册用户登录后才能发表评论。