C++中inline函数的定义可放在头文件中,inline 函数重复出现不会导致连接错误,

附:http://blog.csdn.net/yingxunren/archive/2009/10/13/4663014.aspx

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

  const   的缺省作用域是   extern。 
(本人觉得说得不对,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   的定义。这却是合法的,所以也是例外。)
  
  

_---------------------------------------------------------

inline是放在函数的声明前面的.在实现的时候不要再加上了.inline只是给编译器发一个申请,告诉编译器我的这个函数想成为内联函数,编译器看具体的情况来做定夺.可能讲这个函数作为内联函数,也能不是的.  
   
  "const   object   和inline函数是“一次定义规则”的例外又是什么意思?"  
  inline函数因为实现的时候是相当于复制一份代码到.cpp中,如果它被重复定义的话,是不会产生连接错误的.  
  const   object的作用域仅限于当前的.cpp中.所以当你重复定义的时候其实每一个.cpp中都会出现自己的const   object,没有符号冲突!

---------------------------------------------------------

在C中,定义一个const形对象是会分配空间的,并且这个空间具有全局  
   
  域,因此如果一个const定义在header中,那么如果这个header被多个c  
   
  源文件包含的话,就会产生multiply   defined   symbols的错误。  
   
  可以通过增加static的方式将它的连结属性变成局部的就可以了。  
   
  在C++中,const默认具有static连结域,因此在C++中可以在header中  
   
  定义const。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/rufeng18/archive/2007/11/23/1898873.aspx

 

inline 的函数必须和函数定义一起用才起作用, 而且调用方必须能够看到这个函数的定义,应该是放在定义,声明不需要 。

你可能感兴趣的:(C++中inline函数的定义可放在头文件中,inline 函数重复出现不会导致连接错误,)