C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 标题中定义的函数是否保证内联?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
如果我在头文件中定义非成员函数,它是否总是由编译器内联,或者编译器是否根据其启发式选择?我知道__inline只是一个提示,是否与标题中的函数相同?

解决方法

请记住,在标题中包含某些内容与直接在源文件中键入内容没有什么不同.因此,就编译器而言,在头文件中没有任何区别;它从来不知道它在那里.

因此,当您在头文件中定义一个函数,并将该头文件包含在文件中时,就像您只是直接在文件中键入该函数一样.所以现在问题是,“编译器是否选择基于启发式内联事物?”

答案是“这取决于编译器”.该标准不保证内联或不内联.也就是说,任何现代编译器都会对其内联的内容非常聪明,可能是通过启发式方法.

但是,我们谈到了一个有趣的观点.想象一下,您在标题中有一个函数,并在多个源文件中包含该标题.然后,您将跨翻译单元对函数进行多种定义,这违反了单定义规则.因此,您将收到编译错误. (链接错误通常类似于:“错误,函数x已在y中定义”)您可以使用inline关键字,而不再违反ODR.

顺便说一下__inline是非标准的.与你的帖子相反,它通常是一个强制内联的编译器扩展,而不是暗示它. inline是标准关键字,最初旨在暗示内联.就像你说的那样,大多数现代编译器在这方面完全忽略了它,现在唯一的目的是给内部联系.

大佬总结

以上是大佬教程为你收集整理的c – 标题中定义的函数是否保证内联?全部内容,希望文章能够帮你解决c – 标题中定义的函数是否保证内联?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: