Boo*_*ean 7 c++ inline function
可能重复:
递归函数可以内联吗?
我认为定义为内联的递归函数不会产生任何影响,也不会内联.因为,编译器不知道有多少级别来复制内联函数的代码.有什么想法吗?
我尝试浏览相关的 SO 问题,为您找到一个明确的现有答案,但是唉……
因此,关键字inline(或类定义中定义的隐式内联成员函数)有两个作用:
它保证该函数可以在多个翻译单元中定义,而不违反单一定义规则,即在实践中,链接器不会抗议多个定义。为此,函数的所有定义都必须是inline,并且它们必须相同。
它作为一个模糊的提示,向编译器内联用于调用函数的机器代码。有些调用可能是内联的,有些则不是。内联的程度可能会有所不同,编译器甚至可能完全忽略此提示(实际上,g++ 倾向于遵循荒谬且可能不好的程度,而 Visual C++ 更像是忽略它)。
对于递归函数,如果编译器遵循该函数的任何特定调用的提示,则该调用可以扩展到一级、二级或三级或任何递归级别。这是一件很难做到的事情,所以不要指望它。此外,编译器自己的内联启发式可能比您的直觉更好,因为编译器对事物有更全局的看法(它知道更多),所以,总结一下:
不要用于inline提示效果,而是用于 ODR 保证。
如果您绝对确定自己比编译器更了解,并且遵守“首先测量”和“不要过早优化”等原则,那么您可能能够通过以下方式获得更可靠的内联控制:编译器特定的语言扩展或编译指示。
干杯,