您的位置:首页 > 移动开发 > Objective-C

C++中inline函数的定义为什么要放在头文件中?头文件中“只定义一份”是什么意思?const object 和inline函数是“一次定义规则”

2007-11-23 10:01 951 查看
inline   可以放在   .cpp   中,但此时只有本   cpp   文件可以用它  
   
  如果要做成公用的,就必须放在   .h   中,如果不想放在   .h   中,就必须每个   cpp   文件拷贝一份。  
   
  其实,即使放在   .h   中,也是每个   cpp   文件拷贝一份的,只不过是编译器替你完成这种拷贝罢了。  
   
  inline   函数重复出现不会导致连接错误,即可以重复定义,所以是例外啦,其它函数(指可以在头文件中露面的函数)能重复定义吗?  
   
   
  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   的定义。这却是合法的,所以也是例外。   
   

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

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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  object c++ 编译器 header c
相关文章推荐