如何处理内联函数体内的函数调用?
How are function calls within inlined function's body treated?
假设我们喜欢以下头文件:
标题1.h
#include "Header2.h"
class A
{
public:
void Function();
}
inline void A::Function()
{
// Code ...
OtherFunction(); // Function from Header2.h
// Code ...
}
如果编译器实际上选择内联Function
调用OtherFunction
会发生什么:
- 如果
OtherFunction
定义可用于当前的翻译单元,那么它是否也可以内联到Function
正文中?(基本上嵌套内联可用吗? - 如果
OtherFunction
定义不适用于当前的翻译单元,它是否仍然是一个简单的函数调用,而围绕它的代码被内联?(在编译器选择内联Function
的情况下)
当您在发布配置中构建应用程序时,大多数现代编译器实际上会为您内联函数 - OtherFunction
被声明为内联/正常的效果将与编译器决定哪个是更好的选择相同。我当然知道MSVC10及更高版本的编译器(Visual Studio)会发生这种情况。事实上,内联你想要的任何内容,但编译器最终控制内联的内容。
例如,如果您的函数调用以推送和弹出操作在inline
后没有意义的方式链接,则函数不会内联(即使您将它们声明为 inline
d)
如果它使事情变得更容易 - 请参阅:
何时使用内联函数,何时不使用?
内联函数在C++中的好处?
更重要的是,编译器内联函数的深度有多大?
已经得到了很好的解释。
相关文章:
- 用C++在单独的头文件中完成函数体
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- 我可以在 C++ 中的函数体之外进行操作吗?
- 用符号版本替换对函数的所有调用
- 有没有办法在不使用 #ifdef 的情况下不编译发布版本中的单元测试函数体?
- 函数签名与调用的函数不匹配,常量字符[]和字符*之间的区别?
- 如何只允许在调用函数 B 后调用函数 A?
- 为什么即使我调用参数化构造函数也会调用默认构造函数?
- C++析构函数被意外调用双链表
- Rcpp并行无匹配函数,用于调用"转换"
- 计算对类函数的所有调用次数
- binary_search() 函数在我的函数体中不起作用
- 如何显示函数开始、结束行和函数体?
- 我应该提到纯虚函数中的调用约定吗?
- 如何在类模板的成员函数中正确调用函数对象?正在生成 Visual Studio 编译器错误 C2440
- 主函数体未检测到对重载可变变量模板化函数C++的调用
- 使用委托调用构造函数和在另一个构造函数体中调用的区别
- C++ 结构函数体调用另一个结构函数,同一个模块
- 从结构体中调用c++成员函数指针
- c++中的委托构造函数可以在函数体中调用,也可以在初始化列表中调用