头文件中在线免费功能的可移植性

时间:2014-09-22 15:11:06

标签: c++ static compilation inline portability

鉴于标记内联函数只是对编译器的请求,我想知道某些编译器是否可能产生多个定义错误(如果内联请求被拒绝),而其他编译器可能不会(如果内联请求被接受)?

如果是这样,这是否最好将自由函数标记为静态而不是内联,因为这样可以保证每个TU都有自己的函数副本并避免任何编译器特定的问题?

提前致谢!

2 个答案:

答案 0 :(得分:2)

这不是“只是一个请求” - 对链接的影响,放宽一个定义规则以允许多个翻译单元中的相同定义,是明确定义和可移植的。

这只是一个“请求”,因为编译器是否内联对任何函数的调用,无论它们是否被声明为inline。与几乎所有优化一样,“似乎”规则适用 - 程序行为和正确性不得取决于是否应用了优化。

声明static并不是一个好主意。充其量,它将使程序膨胀,具有多个相同的功能;在最坏的情况下,它会破坏依赖于在翻译单元之间具有一致地址或共享静态变量的函数的代码。

答案 1 :(得分:1)

inline建议仅适用于用实际定义替换函数调用的部分。 inline是以标准批准方式安全绕过One定义规则的唯一方法。但它要求所有函数定义都相同。

好读:以前的答案:

Should I define static inline methods in header file?