inline有什么作用?

itfuture01 2003-06-23 08:00:18
inline有什么作用?一般什么情况下使用inline?
...全文
914 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jeff__lueny 2003-06-23
  • 打赏
  • 举报
回复
看程序,然后自己运行下,出现什么结果,你就知道了!
实践出真知!
turnerbook 2003-06-23
  • 打赏
  • 举报
回复
steedhorse(晨星) de提议好
去看看吧
yymoon 2003-06-23
  • 打赏
  • 举报
回复
当函数的调用时间多于函数的运行时间的时候 用内联函数可以节省函数的调用时间 如果函数的运行较复杂 如有循环语句的时候 就没有必要使用内联函数了
idontlikenickname 2003-06-23
  • 打赏
  • 举报
回复


空间换取时间~~

programmer200x 2003-06-23
  • 打赏
  • 举报
回复
定义内联函数
wangdongzjk 2003-06-23
  • 打赏
  • 举报
回复
在解决C + +中宏存取私有的类成员的问题过程中,所有和预处理器宏有关的问题也随着消失了。这是通过使宏被编译器控制来实现的。在C + +中,宏的概念是作为内联函数来实现的,而内联函数无论在任何意义上都是真正的函数。唯一不同之处是内联函数在适当时像宏一样展开,所以函数调用的开销被取消。因此,应该永远不使用宏,只使用内联函数。
任何在类中定义的函数自动地成为内联函数,但也可以使用i n l i n e关键字放在类外定义的函数前面使之成为内联函数。但为了使之有效,必须使函数体和声明结合在一起,否则,编译器将它作为普通函数对待。因此
inline int PlusOne(int x);
没有任何效果,仅仅只是声明函数(这不一定能够在稍后某个时候得到一个内联定义)。成功的方法如下:
inline int PlusOne(int x) { return ++x ;}
注意,编译器将检查函数参数列表使用是否正确,并返回值(进行必要的转换)。这些事
情是预处理器无法完成的。假如对于上面的内联函数,我们写成一个预处理器宏的话,将有不
想要的副作用。
一般应该把内联定义放在头文件里。当编译器看到这个定义时,它把函数类型(函数名+
返回值)和函数体放到符号表里。当使用函数时,编译器检查以确保调用是正确的且返回值被
正确使用,然后将函数调用替换为函数体,因而消除了开销。内联代码的确占用空间,但假如
函数较小,这实际上比为了一个普通函数调用而产生的代码(参数压栈和执行C A L L)占用的空间还少。在头文件里,内联函数默认为内部连接——即它是static, 并且只能在它被包含的编译单元看到。因而,只要它们不在相同的编译单元中声明,在内联函数和全局函数之间用同样的名字也不会在连接时产生冲突。
为了定义内联函数,通常必须在函数定义前面放一个i n l i n e关键字。但这在类内部定义内联函数时并不是必须的。任何在类内部定义的函数自动地为内联函数。如下例:
#include <iostream.h>

class point{
private:
int i,j,k;
public:
point() {i=j=k=0; }
point(int I,int J,int K) {
i=I;
j=J
k=K;
}
void print(const char* msg="") const{
if(*msg) cout<<"msg"<<endl;
cout<<"i="<<i<<endl;
cout<<"j="<<j<<endl;
cout<<"k="<<k<<endl;
}
};

main(){
point p,q(1,2,3);
p.print("value of p");
q.print("value of q");
}

当然,因为类内部的内联函数节省了在外部定义成员函数的额外步骤,所以我们一定想在
类声明内每一处都使用内联函数。但应记住,内联的目的是减少函数调用的开销。假如函数较
大,那么花费在函数体内的时间相对于进出函数的时间的比例就会较大,所以收获会较小。而
且内联一个大函数将会使该函数所有被调用的地方都做代码复制,结果代码膨胀而在速度方面
获得的好处却很少或者没有。
xiangyongzeng 2003-06-23
  • 打赏
  • 举报
回复
内联函数啊,编译时会展开,像宏定义,不过比宏多了参数检查
主要用户需要高效函数且函数体简单
晨星 2003-06-23
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/1528/1528398.xml?temp=.8195764

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧