内联不是过早优化吗?

4

可能是重复问题:
C++中的内联函数

现代编译器比程序员更擅长决定哪些内容应该被内联,哪些不应该。就像register一样,内联函数是否应该只由编译器完成,并且被视为过早优化呢?


2
...但是你可以在逻辑完成后将其应用到代码中。这样就不会过早了 :P - mike3996
据我所知,inline关键字只被视为编译器的提示,而编译器可能会选择忽略它。 - Kai
2
inline 关键字不仅用于内联函数。实际上,当你想一想时,它根本不是用于内联函数的! :-) - Fyodor Soikin
可能是重复问题:https://dev59.com/eU_Ta4cB1Zd3GeqPFPOw - CB Bailey
3个回答

7

inline有一个双重含义,许多人并不知道——它允许在多个翻译单元中定义函数(即,如果您在头文件中定义了一个未绑定的函数,并在各种翻译单元中包含它,则必须将其声明为inline,否则链接器会抱怨符号被重复定义)。

第二个含义是对编译器的提示,该函数可能从在调用者处内联其机器代码。你是对的,现代编译器/优化器应该能够自己想出这个问题。

我的建议是只在需要时使用inline(第一种情况),永远不要向编译器传递优化提示。这样,您的源代码中就可以解决这个疯狂的双重含义。


3

inline只是与优化略有关联。

如果您需要其提供的“一次定义规则”例外,应选择将inline应用于函数,否则不要使用。大多数情况下,无论函数是否声明为inline,您都可以依赖编译器执行适当的优化。


0

看看这个答案:内联此函数还是不内联?

基本上,是的,在当前情况下,内联是编译器的任务。最初创建内联的目的是告诉编译器它应该尝试。关键字是指示 - 编译器可以选择是否内联函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接