gpt4 book ai didi

c++ - header 中定义的函数是否保证内联?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:04:42 24 4
gpt4 key购买 nike

如果我在头文件中定义了一个非成员函数,它会一直被编译器内联,还是编译器会根据其启发式方法进行选择?我知道 __inline 只是一个提示,它与标题中的函数一样吗?

最佳答案

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

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

答案是“这取决于编译器”。该标准不保证内联或不内联的内容。也就是说,任何现代编译器都会非常智能地处理它内联的内容,很可能是启发式的。

然而,我们得出了一个有趣的观点。想象一下,您在 header 中有一个函数,并将该 header 包含在多个源文件中。然后,您将在翻译单元中有多个函数定义,这违反了一个定义规则。因此,你会得到编译错误。 (链接器错误通常类似于:“错误,函数 x 已在 y 中定义”)您可以做的是使用 inline 关键字,这样您就不会再违反 ODR。

顺便说一句,__inline 是非标准的。与您的帖子相反,它通常是编译器扩展,强制 内联,而不是暗示内联。 inline 是标准关键字,原本是为了暗示内联。就像你说的,大多数现代编译器在这方面完全忽略了它,现在它的唯一目的是提供内部链接。

关于c++ - header 中定义的函数是否保证内联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2391294/

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