C++ 内联函数
内联函数和普通函数的区别:
普通函数在内存上只有一份,任何地方在调用她的时候分3步:
①:找出这个函数
②:执行此内联函数
③:返回结果(可以是void),结束此函数,继续执行此函数下面的代码
但是内联函数的调用步骤和不同函数是以一样的 , 因为他在编译的时候就不一样:
如何编译:
如果此函数是内联函数,那么在编译的时候,只要是此函数被调用的地方,编译器都会copy一份此函数放入这个地方。所以,内联函数的执行,就没有不同函数那么多的步骤,直接就执行了。
这样的好处是效率是比较高的,调用的地方多了 , 那么copy的次数也多,那样占用的内存也多。
来一个简单的内联:
#include<iostream>usingnamespacestd;inlinevoidfun1(){cout<<"这是内联函数"<<endl;}intmain(){fun1();return0;}
解析:
申明内联函数需要用到关键字 : inline
另外需要注意的地方:
①:函数申明(有申明)以及其实现都需要使用inline关键字
#include<iostream>usingnamespacestd;inlinevoidfun1();inlinevoidfun1(){cout<<"这是内联函数"<<endl;}intmain(){fun1();return0;}
②:类内定义-类外实现都需要使用inline关键字
#include<iostream>usingnamespacestd;classInlineC{public:inlinevoidfun();};inlinevoidInlineC::fun(){cout<<"这是内联函数"<<endl;}intmain(){InlineC*in=newInlineC;in->fun();deletein;return0;}
内联函数和宏相似,都是copy,但是他比宏要安全
举个例子:
#include<iostream>usingnamespacestd;#defineSUM(x)x*xclassInlineC{public:inlinevoidfun();};inlinevoidInlineC::fun(){cout<<"这是内联函数"<<endl;}intmain(){InlineC*in=newInlineC;in->fun();deletein;cout<<"--------------------------------------"<<endl;cout<<SUM(1+3)<<endl;return0;}
结果:
并没有得到结果 16 。
宏的严谨性没inline高。
最后 , 一个默认 : 把inline的申明及实现写在head里面。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。