为什么要在C++中明确声明"inline"

Why explicitly state "inline" in C++

本文关键字:声明 inline C++ 为什么      更新时间:2023-10-16

可能重复:
我应该什么时候写关键词';inline';对于函数/方法?

所以这个问题困扰了我一段时间,我无法得到确切的答案。我的理解是,一个好的编译器通常会意识到,当内联一个函数既安全又有利时,如果启用优化,它会内联所有这些函数,无论它们是否被程序员明确标识为内联函数。此外,编译器会意识到何时内联函数是不安全/不明智的,并且在这种情况下会忽略程序员对内联函数的请求。

因此,我想知道将函数明确声明为内联的好处是什么?只要打开了优化,编译器就会内联它认为合理的所有函数,并且只内联那些函数。

我发现了一些关于内联保护的讨论,因为嵌套的h文件导致了多个定义,但肯定#ifdefine在标题源代码中是更好的做法,并再次导致关键字内联无效?

您对编译器优化非常了解。你对inline的假设是错误的。尽管inline这个名字不是为了优化。inline主要是"违反"一个定义规则而不受惩罚。基本上,它告诉链接器,许多翻译单元都可以看到这个定义,所以它不应该在多个翻译单元上找到它。

有些编译器可能会将其视为内联函数的提示,但这完全取决于编译器,忽略该提示是完全有效的。

标头保护仅针对同一翻译单元上的多个定义提供保护。它们不跨翻译单位工作。

头保护不能防止多个定义错误。

链接器会遇到多个定义,并且当同一定义包含在单独的编译单元中时会出现多个定义。