内联函数应该在共享库头文件中使用吗?

时间:2014-01-20 16:42:01

标签: c++ shared-libraries inline header-files

假设没有要求保持实现私有,在头文件中提供内联函数是否有缺点?

我已经阅读了各种各样的事情,但没有看到明确的答案。在我的库的已安装标头中放入内联函数有哪些优缺点?选择这样做时有什么我应该考虑的吗?

2 个答案:

答案 0 :(得分:4)

如果要在库版本之间保持二进制兼容性,那将是一个问题。考虑一下如果更改动态库的布局/成员会发生什么。您的用户有一些方法可以在其应用程序中内联(对于旧布局)。当他们的应用程序将加载您的库(具有不同布局的新版本)时,将调用这些旧方法,并可能导致无效的内存读取/崩溃。

顺便说一句,对于libs,最好使用PIMPL用于任何用户面向类。

答案 1 :(得分:3)

有一个潜力可以提升性能,但是你失去了动态链接的许多好处。通常,只需更新共享对象文件,就可以使现有的二进制文件从(ABI兼容的)更改,错误修复和改进中受益。当一些库代码被内联到二进制文件中时,你就像静态链接一样:你需要重新编译所有可执行文件来更新它们。

公平地说,这只影响inline函数中代码的更改。但经验表明,需要不时更新的代码与内联的代码之间存在一些重叠。