当前位置:首页 » 业界相关

const static class member问题

 Advertisement:

热门软件下载:


<<ec中文版>>p14,给了一个例子:  
  class   gameplayer   {  
  static   const   int   num_turns   =   5;  
  int   scores[num_turns];  
  //.......  
  };  
  并且说:“以上所见的只是num_turns的一个声明而非定义。你还必须在程序文件中定义static   class   memebers:  
  const   int   gameplayer::num_turns;//class专属常量的定义应该放在class的实现文件中  
  ”  
  ****我的疑问****:  
  1、好象不是“必须在程序文件中定义”把,我将.h文件中放class的声明,.cpp文件中没有放定义也是可以的。  
  2、(不只是在类中)为什么static变量在声明的时候一定要加,在定义式就不需要加了(如果已经声明)?  
   
  我是菜鸟,大虾请指点...

推荐阅读

  • 索尼CEO:向高清过渡将是业界的一个分水岭 [详细内容]
  • 传三星明年放弃笔记本代工与戴尔分道扬镳 [详细内容]
  • 科胜讯发布免费接收机顶盒 DVB解码器系列 [详细内容]
  • 2006国际消费电子展 索尼“娱乐未来” [详细内容]
  • 性价比真高 [详细内容]
  • 太阳诱电公司 0201片式电感电感值达100NH [详细内容]
  • 索尼蓝光DVD播放机今夏上市 首推30G硬盘DV [详细内容]
  • 网友回答:
    网友:cybergate

    呵呵,这是c++标准的规定,没有必要细究理由。事实上许多编译器已经去掉了这个规定。

    网友:gop

    1。好象不是“必须在程序文件中定义”把,我将.h文件中放class的声明,.cpp文件中没有放定义也是可以的。  
       
      "必须在程序文件中定义"这句话所说的“程序文件”,并不是单指cpp;.h也是“程序文件”  
         
      2。"声明"中的那个static不可省略,因为省略了static,它就不在仅仅是decleare,而是      
            declear+define了。因为默认是的是class的普通成员。  
       
       
     

    网友:lbaby

    我的意思是,const   static   class   member为什么规定要一定要定义呢??  
       
      //任何一个你使用的变量都要定义  
      //区分定义和声明  
      //比如:  
      //void   fun(void);   //声明  
      而  
      //void   fun(void)  
      //       {   }//定义  
       
      第二问是问:  
      为什么声明的时候加static,定义的时候不加,  
      //你已经声明过了,  
      声明+定义的时候也要加..????  
      //你必须声明  
     

    网友:chinajiji

    1、好象不是“必须在程序文件中定义”把,我将.h文件中放class的声明,.cpp文件中没有放定义也是可以的。  
      *****************************************  
      iso   c++   98   标准中规定:  
      对于class中的       static   const   int   member     可以在声明的同时赋初值,也可以分开赋初值.  
      vc6.0中不能在声明的同时赋初值.  
       
      2、为什么static变量在声明的时候一定要加,在定义式就不需要加了?  
      **********************************************  
      声明时之所以要加static,是因为static   const   int   i;与const   int   i;含义大不相同.  
      定义时只所以不加satic,是因为:  
      1.声明时已加了static  
      2.static   member是external   linkage,而普通的全局static   变量是interal   linkage,如果在定义是再加一个static,两种linkage含义相矛盾,所以标准中规定定义是不能加static;  
      3.const   非class   member   变量也是interal   linakge,为什么在static   const   int   class   member定义是却要加上const?难道不怕出现两种linkage含义相矛盾?  
          对,不用担心.因为:虽然   const   非class   member   变量是interal   linakge,但如果有该const   变量定义所在的编译单位之外的模块声明引用该const   变量,那么,这相const   变量就不再interal   linkage了,也就是说也是外面可见的了.区分const   变量的声明与定义这样做:  
       
      const   int   i   =   10;   //定义:  
      声明:  
      extern   const   int   i;   //   声明;  
      所以:static   const   int   member   在class中完整的写法应该这样:  
      class   test   {  
      extern   static   const   int   i;   //但这样写是没有必要的,因为编译知道这是在声明,而不是在定义  
      }  
      const   int   test::i   =   10;  
       
     

    网友:chinajiji

    补充:  
      2、为什么static变量在声明的时候一定要加,在定义式就不需要加了?  
      **********************************************  
      因为只有static   class   member   才需要定义,非static   member不需要也不可以定义,所以,在定义static   class   member时不需要加上"static"---编译器知道这是也只能是static   class   member.  
     

    .  

    相关评论

    Login