inline函数

来源:互联网 发布:免费刷手机淘宝流量 编辑:程序博客网 时间:2024/04/28 01:39

今天在OPenOffice源码中看到一个类中的inline函数是在.cxx文件里定义的,并且在多个.cxx文件中定义,感觉甚是奇怪。所以做了些研究。

1.将函数声名为inline,表示要求编辑器在每个函数调用点上,将函数的内容展开,这样就省去了函数调用的开销,提高函数调用的效率.  
2.more   effective   C++中就建议要多使用inline   和const而尽量少用#define!  
  虽然他们的功能好象是一样的,但inline比#define在出错后要   便于发现错误的出处!宏总是被扩展,但inline函数不总是被直接插入!

3.不过对于比较大的函数不宜使用inline,因为会造成代码膨胀。

4.即使你把函数定义为inline,但编译的时候是当成函数调用,还是宏替换,取决于编译器优化的结果.  
  就是说有的inline函数也会被当成一般函数进行调用.  
5.inline相当于类型安全的宏,与其他函数在link期间连接不同,它是编译期间进行扩展的,最好在头文件中定义。template也一样。

6.inline   可以放在   .cpp   中,但此时只有本   cpp   文件可以用它。    
  如果要做成公用的,就必须放在   .h   中,如果不想放在   .h   中,就必须每个   cpp   文件拷贝一份。    
  其实,即使放在   .h   中,也是每个   cpp   文件拷贝一份的,只不过是编译器替你完成这种拷贝罢了。    
  inline   函数重复出现不会导致连接错误,即可以重复定义,所以是例外啦,其它函数(指可以在头文件中露面的函数)能重复定义吗?  
7. C++   中的   const   其实是一种特殊的变量,除了不允许你修改它的值,其它方面与变量没有任何(任何两个字应该加着重号)区别。  

  const   的缺省作用域是   extern。   
  const   int   x   =   1234;   

  这种东东头文件里很常见。而且它相当于:   
  extern   const   int   x   =   1234;   
   如果把   const   去掉,就成了   
  extern   int   x   =   1234;   
  但   extern   int   x   =   1234;   是不允许出现在头文件里的,因为可能引起连接错误。  
  extern   int   x;   是变量声明,extern   int   x   =   1234;   却是变量声明加定义。变量可以反复声明,只要不互相矛盾,但定义只能一次。    
  但是   const   int   x   =   1234;   也同样是全局“变量”定义(如果是声明,就该是   const   int   x;),却可以出现在头文件里,当  多个   cpp   文件包含了这个头文件,就相当于每个   cpp   文件里都有了一个“全局变量”x   的定义。这却是合法的,所以也是例外。

原创粉丝点击