为什么在C++中明确表示"内联"

dmo*_*mon 14 c++ optimization inline

可能重复:
我应该何时为函数/方法编写关键字'inline'?

所以这个问题已经困扰了我一段时间,我无法得到明确的答案.我的理解是,一个好的编译器通常会意识到什么时候对函数内联安全和有利,并且如果开启优化,它将内联所有这些函数,它们被明确地识别为内联函数.程序员与否.此外,编译器将识别何时对内联函数不安全/不敏感,并且在这种情况下将简单地忽略程序员对内联函数的请求.

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

我发现了一些关于嵌套h文件的内联保护以防止多个定义的讨论,但肯定#ifdefine的头文件源代码是更好的做法,并再次使用关键字inline void?

R. *_*des 15

您可以了解编译器优化.你假设什么inline是错的.尽管名称inline不是为了优化.inline主要是"违反" 一个定义规则而不受惩罚.基本上,它告诉链接器许多翻译单元可以看到该定义,因此它不应该在多个翻译单元上找到它.

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

标题保护仅防止同一翻译单元上的多个定义.它们不适用于翻译单位.

  • @mysticial:不,`static`使链接器包含所有重复的定义,而`inline`使它选择一个并链接所有其他引用. (6认同)

Ben*_*igt 8

标题保护不能防止多个定义错误.

链接器遇到多个定义,并且当相同的定义包含在单独的编译单元中时会发生.