头文件中内联自由函数的可移植性
portability of inline free functions in header file
鉴于将函数标记为内联只是对编译器的请求,我想知道某些编译器是否会产生多个定义错误(如果内联请求被拒绝),而其他编译器可能不会(如果内联要求被接受)?
如果是这样,那么将自由函数标记为静态而不是内联是否更可取,因为这将确保每个TU都有自己的函数副本,并避免任何编译器特定的问题?
提前感谢!
这不仅仅是"一个请求"-对链接的影响,放宽"一个定义规则"以允许在多个翻译单元中进行相同的定义,是定义良好且可移植的。
这只是一个"请求",因为是否内联调用任何函数都取决于编译器,而不管它们是否声明为inline
。与几乎所有的优化一样,"好像"规则适用——程序的行为和正确性不能取决于是否应用了优化。
宣布它为static
不是一个好主意。充其量,它会膨胀具有多个相同功能的程序;在最坏的情况下,它会破坏依赖于在转换单元之间具有一致地址或共享静态变量的函数的代码。
inline
作为建议仅适用于用实际定义替换函数调用的部分。inline
是以标准认可的方式安全绕过One定义规则的唯一方法。但它要求所有的函数定义都是相同的。
阅读良好:我之前的答案:
我应该在头文件中定义静态内联方法吗?
相关文章:
- C++Union/Struct位域的实现和可移植性
- 静态库可移植性
- C++:Unicode 字符串文字的可移植性
- 如何使Visual Studio 2017 C++项目在计算机之间更具可移植性
- 在为视频游戏实施基本的二进制序列化时,请担心可移植性
- 重写类以使其更通用,以实现可移植性
- Visual Studio 2015 <=> QtCreator 5 (c++) 代码可移植性
- 通过虚拟接口类导出C 类的可移植性
- 位移位可移植性
- 如何在Visual Studio中进行串行端口编程C++Windows和Linux之间的可移植性?
- 提高 Python 可移植性问题
- 库如何在不同的操作系统之间实现可移植性
- 使用C 11 /最近的G 版本(4.7 / 4.6)的可移植性
- 模板函数实例化的可移植性问题
- XCode、命名空间、C++和代码可移植性
- 嵌入式C++项目 - 需要支持智能指针.可能的可移植性问题
- 使用指针遍历数组的可移植性
- 头文件中内联自由函数的可移植性
- 文件IO中的可移植性问题
- 在不使用元素复制赋值运算符的情况下复制向量 - 可移植性