在c++中对函数内联的要求
函数需要满足哪些要求才能在C++中以内联方式执行?
有没有函数不能内联的情况?
或者任何函数都可以是内联的,程序员有责任根据运行时和编译时的考虑因素来决定如何定义该函数?
解决方案
有哪些要求 函数,以便可以执行该函数 用C++进行内联?
需要在调用它的每个位置定义它(通常通过将它放在.h
中来完成)。
是否存在函数不能 内联?
我认为不是在语言标准方面,尽管当然每个编译器都可以而且将实现自己的一些限制。
或者任何函数都可以是内联的,它 是国家的责任 程序员决定如何定义 函数,基于运行时和 编译时间注意事项?
inline
关键字只是程序员对编译器的一个提示,程序员确实希望内联该函数(如分析器所示,程序员可能已经发现在"热"循环中调用一个小函数的大量调用开销--或者,该函数非常小,以至于它与调用代码一样小;-)--或者,内联该函数允许"跨越函数边界进行优化",而特定编译器无法发现或无法以其他方式执行这些优化。
编译器可以自由地忽略提示,就像它可以自由地忽略变量存储类的旧register
提示一样(我相信现在大多数优化的C++编译器确实会忽略register
,但忽略inline
的人很少)--也就是说,编译器可以自由地内联对一个函数的所有或部分调用,无论该函数是否声明为inline
。
(当然,当通过指向某个函数的显式指针完成这些调用时,或者在将该函数的地址作为参数传递给其他某个函数时,它不会"内联调用",但这可能会影响特定调用的内联,而不一定影响对同一函数的其他调用,这些调用的执行方式不同)。
"以防万一"您的编译器非常认真地接受您的inline
提示,在有或没有inline
的情况下测量代码大小和速度通常是值得的(除非您的编译器为此提供了选项/标志,否则只有#define inline
肯定会"禁用"inline
的效果,从而允许进行这种测量)。但是如果你要在多个编译器上部署你的代码,比如。对于多个体系结构,请注意,考虑到编译器在CPU体系结构中的优化策略和的不同,在一个平台上积极的影响可能最终会在另一个平台上适得其反。
相关文章