在c++中对函数内联的要求 [英] requirement for a function to be inline in c++

查看:36
本文介绍了在c++中对函数内联的要求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

函数需要满足哪些要求才能在C++中以内联方式执行? 有没有函数不能内联的情况? 或者任何函数都可以是内联的,程序员有责任根据运行时和编译时的考虑因素来决定如何定义该函数?

推荐答案

有哪些要求 函数,以便可以执行该函数 用C++进行内联?

需要在调用它的每个位置定义它(通常通过将它放在.h中来完成)。

是否存在函数不能 内联?

我认为不是在语言标准方面,尽管当然每个编译器都可以而且将实现自己的一些限制。

或者任何函数都可以是内联的,它 是国家的责任 程序员决定如何定义 函数,基于运行时和 编译时间注意事项?

inline关键字只是程序员对编译器的一个提示,程序员确实希望内联该函数(如分析器所示,程序员可能已经发现在"热"循环中调用一个小函数的大量调用开销--或者,该函数非常小,以至于它与调用代码一样小;-)--或者,内联该函数允许"跨越函数边界进行优化",而特定编译器无法发现或无法以其他方式执行这些优化。

编译器可以自由地忽略提示,就像它可以自由地忽略变量存储类的旧register提示一样(我相信现在大多数优化的C++编译器确实会忽略register,但忽略inline的人很少)--也就是说,编译器可以自由地内联对一个函数的所有或部分调用,无论该函数是否声明为inline

(当然,当通过指向某个函数的显式指针完成这些调用时,或者在将该函数的地址作为参数传递给其他某个函数时,它不会"内联调用",但这可能会影响特定调用的内联,而不一定影响对同一函数的其他调用,这些调用的执行方式不同)。

"以防万一"您的编译器非常认真地接受您的inline提示,在有或没有inline的情况下测量代码大小和速度通常是值得的(除非您的编译器为此提供了选项/标志,否则只有#define inline肯定会"禁用"inline的效果,从而允许进行这种测量)。但是如果你要在多个编译器上部署你的代码,比如。对于多个体系结构,请注意,考虑到编译器在CPU体系结构中的优化策略的不同,在一个平台上积极的影响可能最终会在另一个平台上适得其反。

这篇关于在c++中对函数内联的要求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆