可以做视频的网站,网络管理系统设备,河南23个岗位无人报考,wordpress获取图片原图一、概念 以inline修饰的函数叫做内联函数#xff0c;编译时c编译器会在调用函数的地方展开#xff0c;而不会建立栈帧#xff0c;提升了程序运行的效率 例子#xff1a;
#include iostream
using namespace std;int Add(int left, int right)
{return left - ri… 一、概念 以inline修饰的函数叫做内联函数编译时c编译器会在调用函数的地方展开而不会建立栈帧提升了程序运行的效率 例子
#include iostream
using namespace std;int Add(int left, int right)
{return left - right;
}
int main()
{int ret 0;ret Add(1, 2);return 0;
} 查看反汇编代码发现一个call指令 如果在上述函数前增加inline关键字将其改成内联函数在编译器期间编译器会将函数体替换函数的调用 两个注意点 1.在debug环境下默认不会对编译器优化所以要查看inline函数得先开启设置不然的话即使加了inline还是看不到inline函数展开的过程 2.release环境下不管什么对编译器进行了很强大的优化 debug环境 右击该解决方案选择属性选择以下内容 设置好后再查看反汇编此时没有了call指令 release环境 在release版本下发现优化的更加厉害前面的啥指令都不调用了 也不开空间了。
二、特性
1.inline是一种以空间换时间的做法如果编译器将函数当成内联函数处理则在编译阶段函数体会替换函数调用优点少了调用开销提高程序运行效率缺点可能使目标文件变大
2.inline只是给编译器提供一个展开建议至于实不实现展开看编译器一般来说函数规模较小、不是递归、不是频繁调用的inline函数编译器会展开函数体否则会忽略其特性。
3.inline不建议声明和定义分离分离会导致链接错误。因为inline函数被展开就没有了函数地址就没有了call指令那么在链接时就会找不到定义 。look
//fun.h
#include iostream
using namespace std;inline void fun(int i);//fun.cpp
#include fun.h
void f(int i)
{cout i endl;
}//test.cpp
#include fun.hint Add(int left, int right)
{return left - right;
}
int main()
{int ret 0;ret Add(1, 2);return 0;
}编译结果