gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 00:24:03 25 4
gpt4 key购买 nike

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

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

提前致谢!

最佳答案

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

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

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

关于c++ - 头文件中内联自由函数的可移植性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25977446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com