【发布时间】:2012-01-17 00:19:21
【问题描述】:
我知道关键字inline 具有有用的属性,例如用于将模板特化保存在头文件中。
另一方面,我经常读到inline 作为编译器实际内联函数的提示几乎毫无用处。
此外,该关键字不能在 cpp 文件中使用,因为编译器希望在调用时检查标有 inline 关键字的函数。
因此,我对现代编译器(即 gcc 4.43)的“自动”内联功能有点困惑。当我在 cpp 中定义一个函数时,如果编译器认为内联对函数有意义,或者我是否剥夺了他的一些优化能力,编译器是否可以内联它? (这对于大多数函数来说都很好,但对于经常调用的小函数来说很重要)
【问题讨论】:
-
你应该检查你的编译器的链接时优化支持。在 GCC 中,这是通过
-flto启用的。 -
非常感谢所有的答案。由于它们相似,我选择了最快的一个作为接受,而这三个都教会了我一些东西。
-
我们不希望鼓励快速回答。人们已经有太多的比赛需要快速输入常见的(但不正确的信息)来获得支持。我们希望鼓励深思熟虑和信息丰富的答案。注意:请注意,我不同意您的最终选择,只是它的派生方法。
-
@Loki:我完全同意你的观点,这场比赛是问答中的常见瘟疫。也许我应该再补充一个理由。如果内容有效并且满足我的回答,我倾向于接受代表最低的人的回答。我认为这有助于人们建立一些声誉,鼓励参与并导致门户网站更加多样化。当然,这仅适用于好的答案。
-
澄清一下:你的意思是内联跨文件吗? “在 cpp 文件中定义”是指“不在共享 hpp 中”吗?
标签: c++ compiler-construction inline