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

C++ 头文件中内联自由函数的可移植性,c++,static,compilation,inline,portability,C++,Static,Compilation,Inline,Portability,鉴于将函数标记为内联只是对编译器的一个请求,我想知道一些编译器是否会产生多个定义错误(如果内联请求被拒绝),而其他编译器可能不会(如果内联请求被接受) 如果是这样的话,那么是否最好将自由函数标记为静态函数而不是内联函数,因为这将保证每个TU都有自己的函数副本,并避免任何特定于编译器的问题 提前谢谢 内联仅在用实际定义替换函数调用的部分才是建议内联是以标准批准方式安全绕过一个定义规则的唯一方法。但它要求所有函数定义都相同 读得好:我以前的回答: 内联仅在用实际定义替换函数调用的部分才是建议内联是以

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

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


提前谢谢

内联
仅在用实际定义替换函数调用的部分才是建议<代码>内联是以标准批准方式安全绕过一个定义规则的唯一方法。但它要求所有函数定义都相同

读得好:我以前的回答:


内联
仅在用实际定义替换函数调用的部分才是建议<代码>内联是以标准批准方式安全绕过一个定义规则的唯一方法。但它要求所有函数定义都相同

读得好:我以前的回答:


内联
仅在用实际定义替换函数调用的部分才是建议<代码>内联是以标准批准方式安全绕过一个定义规则的唯一方法。但它要求所有函数定义都相同

读得好:我以前的回答:


内联
仅在用实际定义替换函数调用的部分才是建议<代码>内联是以标准批准方式安全绕过一个定义规则的唯一方法。但它要求所有函数定义都相同

读得好:我以前的回答:

这不仅仅是“一个请求”——对链接的影响,放松一个定义规则,允许在多个翻译单元中使用相同的定义,是定义良好且可移植的

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

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

这不仅仅是“一个请求”-对链接的影响,放松一个定义规则,允许在多个翻译单元中使用相同的定义,是定义良好且可移植的

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

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

这不仅仅是“一个请求”-对链接的影响,放松一个定义规则,允许在多个翻译单元中使用相同的定义,是定义良好且可移植的

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

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

这不仅仅是“一个请求”-对链接的影响,放松一个定义规则,允许在多个翻译单元中使用相同的定义,是定义良好且可移植的

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


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

Nope;即使构建工具选择不内联函数,他们仍然必须在说了算和做了算之后只创建一个定义;即使构建工具选择不内联函数,他们仍然必须在说了算和做了算之后只创建一个定义;即使构建工具选择不内联函数,他们仍然必须在说了算和做了算之后只创建一个定义;即使构建工具选择不内联函数,它们仍然必须在完成所有操作后只创建一个定义。