在头.h写函数实现体和在cpp中写实现体的区别

在C++中,内联函数和普通函数的主要区别在于效率和使用场景。内联函数常用于提高小规模代码的执行效率,定义在头文件中,允许编译器替换函数调用。如果函数体过大,编译器可能会忽略内联请求。内联函数不宜包含复杂的控制结构,如循环或条件语句,并应在调用前声明。
在头.h写函数实现体和在cpp中写实现体的区别:
其实区别就是一句话:
在.h中写成员函数的实现体就则该函数就是内联函数,在.cpp中写实现体就是普通成员函数。


 
****声明内联函数看上去和普通函数非常相似: 
     void f(int i, char c); 
     
     
    当你定义一个内联函数时,在函数定义前加上 inline 关键字,并且将定义放入头文件: 
     inline 
     void f(int i, char c) 
     { 
     // ... 
     } 
     
     
    ***任何在类的说明部分定义的函数都会被自动的认为是内联函数。 
    内联函数必须是和函数体申明在一起,才有效。像这样的申明:Inline Tablefunction(int I) 是没有效果的,编译器只是把函数作为普通的函数申明,我们必须定义函数体。 
    Inline tablefunction(int I) {return I*I}; 
     
     
    这样我们才算定义了一个内联函数。我们可以把它作为一般的函数一样调用。但是执行速度确比一般函数的执行速度要快。 
    我们也可以将定义在类的外部的函数定义为内联函数,比如: 
    Class TableClass{ 
     Private: 
      Int I,j; 
     Public: 
      Int add() { return I+j;}; 
      Inline int dec() { return I-j;} 
      Int GetNum(); 
    } 
    inline int tableclass::GetNum(){ 
    return I; 
    } 
     
     
    ***上面申明的三个函数都是内联函数。在C++中,在类的内部定义了函数体的函数,被默认为是内联函数。而不管你是否有inline关键字。 
    内联函数在C++类中,应用最广的,应该是用来定义存取函数。我们定义的类中一般会把数据成员定义成私有的或者保护的,这样,外界就不能直接读写我们类成员的数据了。
对于私有或者保护成员的读写就必须使用成员接口函数来进行。如果我们把这些读写成员函数定义成内联函数的话,将会获得比较好的效率。 
    Class sample{ 
     Private: 
      Int nTest; 
     Public: 
      Int readtest(){ return nTest;} 
     Void settest(int I) {nTest=I;} 
    } 
     
    以下内容摘自:http://www.cnblogs.com/socrassi/archive/2009/09/09/1563002.html
  当然,内联函数也有一定的局限性。就是函数中的执行代码不能太多了,如果,内联函数的函数体过大,一般的编译器会放弃内联方式,而采用普通的方式调用函数。这样,
内联函数就和普通函数执行效率一样了。 


***使用内联函数时应注意以下几个问题:


(1) 在一个文件中定义的内联函数不能在另一个文件中使用。它们通常放在头文件中共享。
(2) 内联函数应该简洁,只有几个语句,如果语句较多,不适合于定义为内联函数。 
(3) 内联函数体中,不能有循环语句、if语句或switch语句,否则,函数定义时即使有inline关键字,编译器也会把该函数作为非内联函数处理。
(4) 内联函数要在函数被调用之前声明。
例如:
#include <iostream.h>
int increment(int i);
inline int increment(int i){
  i++; return i;
}
void main(void){  ……
}
如果我们修改一下程序,将内联函数的定义移到main()之后: 
    #include <iostream.h>
int increment(int i);
void main(void){  ……
}
//内联函数定义放在main()函数之后
inline int increment(int i){
  i++; return i;
}
内联函数在调用之后才定义,这段程序在编译的时候编译器不会直接把它替换到main中。也就是说实际上"increment(int i)"只是作为一个普通函数被调用,并不具有内联函数的性质,无法提高运行效率。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值