C++中,什么是隐式内联函数?能举个例子吗

 我来答
chujiangke001
2013-05-25 · TA获得超过1605个赞
知道小有建树答主
回答量:1352
采纳率:0%
帮助的人:694万
展开全部
在c++中内联函数是对宏定义一种改造,因为利用内联函数取代宏定义得好处是:
1、可进行类型安全检查或自动类型转换、
例如:在c语言中,常用预处理器语句#define来代替一个函数定义。例如:
#define MAX(a,b) ((a)>(b)? (a):(b))
该语句是在程序中每个出现Max(a,b)函数调用得地方,都被后面得表达式((a)>(b)?(a):(b))所替代
不难发现其实对参数a,b来说都没有数据类型得定义,缺少一些安全性检查。

2、提高程序的运行效率
对于c++中一般得函数,被程序调用得时都需要为该函数开辟空间进行函数得压栈、出栈等所带来得开销,而
内联函数像宏一样被展开,调用内联函数的时候,由编译器负责把内联函数的函数体代码块替换到内联函数被调用的
地方,这一点与宏替换很相似;取消了函数参数压栈、出栈所带来的开销,从而减少了函数调用开销,提高程序得运
行效率。
所以,内联函数在项目开发中经常用到,所以关于内联函数得使用应用如下:
第一种 、内联函数得声明和函数体得定义在一起
例如:
inline int Max(int a, int b){return ((a > b) ? a : b)};

第二种、c++类得成员函数也可以被定义为内联函数
class Student{
private:
int nID;
int nAge;
float fScore;

public:
void setID(int nid){ nID = nid; } //该成员函数默认自动为内联函数(隐式定义内联函数)
int getID(void){ return nID; } //该成员函数默认自动为内联函数(隐式定义内联函数)
inline void setAge(int nage) { nAge = nage; } //显式定义内联函数
inline int getAge(void) { return nAge; } //显式定义内联函数
void setScore(float fscore); //类定义体内没有声明为内联函数;
float getScore(void); //类定义体内没有声明为内联函数;
}
inline void Student::setScore(float fscore){ fScore = fscore; } //类定义体外实现为内联函数;
inline float Student::getScore(void) { return fScore; } //类定义体外实现为内联函数;

注意:(1)C++中,在类定义体内部定义了函数体的成员函数,被编译器默认为内联函数,而不管这个函数头前面是
否有关键字inline,比如:setID()、getID()、setAge()、getAge();
(2)以把实现在类定义体外部的成员函数定义为内联函数,这个时候在类定义体中只有成员函数头的声明,而
其实现是在类定义体外部,比如:setScore()和getScore();
内联函数的局限性:
1、由于内联函数与宏一样也是实现为代码替换,所以定义为内联函数的函数体不宜过大,如果函数体过
大,则某些普通的编译器就会放弃内联方式,而改用调用普通函数的方式,这样就失去了内联函数的意义了;所以,
内联函数的函数体代码不宜过大,一般就是3---4行代码即可;
2、由于内联函数是编译器在便宜阶段进行函数体展开的,所以,这就把类的内联函数的定义与实现都必须在
声明类的那个头文件中,而不能放在实现类的那个cpp文件中;这一点与模板template<>的特性相似
追问
狂汗,能举个例子么,说明这是隐式,内联
普洛智应
推荐于2016-10-19 · 知道合伙人互联网行家
普洛智应
知道合伙人互联网行家
采纳数:410 获赞数:1585
虚拟现实(VR/AR)以及游戏相关技术,物联网以及传感器技术

向TA提问 私信TA
展开全部
class A
{
      //.....
      int fun_inline(){ return 0;}
      //.....
};

就是实现直接写在类的声明中了的函数

更多追问追答
追问
这是成员内联函数吧?跟隐式有什么关系?哪里隐了?
追答
呵呵,就是说你虽然没用inline 关键字但是这个函数实际被认为是内联函数。。。如果你要在类的声明之外写这个函数的实现,想让它是内联函数就要用inline关键字才行,那就不是隐式内联了。。。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式