是不是内联过早优化?

时间:2011-03-05 22:42:16

标签: c++ optimization compiler-construction inline

  

可能重复:
  Inline functions in C++

现代编译器在决定应该内联什么和不应该什么时,比程序员更好。就像register一样,内联函数不应仅仅是编译器的工作,而应该被认为是过早优化?

3 个答案:

答案 0 :(得分:7)

inline具有双重含义,有些人不知道 - 它允许在多个翻译单元中定义函数(即,如果您在标题中定义未绑定函数并在各种翻译单元中包含它,你被迫声明它内联或链接器会抱怨双重定义的符号)。

第二个含义是向编译器提示该函数可以通过在调用者站点内联其机器代码而获益。你是对的,现代编译器/优化器应该能够自己解决这个问题。

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

答案 1 :(得分:3)

inline仅与优化相关。

如果您需要为其提供的一个定义规则的例外情况,则应选择将inline应用于某个功能,如果不需要,则将其保留。大多数情况下,您可以依赖编译器来执行适当的优化,而不管函数是否声明为inline

答案 2 :(得分:0)

查看此答案:Inlining this function or not?

基本上,是的,内联是此时编译器的任务。最初创建内联是为了向编译器指示它应该尝试。关键字是指示 - 编译器可以选择是否内联函数。