保守地使用inline

ZDNet软件频道 时间:2004-02-05 作者:ZDNet China |  我要评论()
本文关键词:cpptips
在早期的C++中,inline关键字通常被认为是劝说程序员使用setters和getters代替直接访问数据成员的一种方式。今天,大多数的编译器都比一般程序员更加清楚什么函数更适合inlining。此外,inline的使用可以导致繁重的维护问题,敏感的bugs和无用功。
本文译自Builder.com,未经许可请勿转载

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

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

 class File
{
public:
  int get_descriptor() const;
//..
private:
  int _fd;
//..
};


inline int File::get_descriptor() const
{ return _fd;} //fine, a slim function body

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

Inline和静态连接

另外一个问题在被代码库使用的inline函数中浮现。许多程序使用的是静态连接,这个自动访问一个新的DLL,并且在没有终端用户改变他们的程序的情况下进行繁殖代码改变。但是,如果一个inline函数的整体改变了它将不能维护二元位的兼容性,在这种情况下,用户必须重新编译他们的代码。

Inline使用规则

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


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




责任编辑:李宁

欢迎评论投稿

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134