头文件中内联自由函数的可移植性

portability of inline free functions in header file

本文关键字:函数 可移植性 自由 文件      更新时间:2023-10-16

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

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

提前感谢!

这不仅仅是"一个请求"-对链接的影响,放宽"一个定义规则"以允许在多个翻译单元中进行相同的定义,是定义良好且可移植的。

这只是一个"请求",因为是否内联调用任何函数都取决于编译器,而不管它们是否声明为inline。与几乎所有的优化一样,"好像"规则适用——程序的行为和正确性不能取决于是否应用了优化。

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

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

阅读良好:我之前的答案:

我应该在头文件中定义静态内联方法吗?