多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > C/C++ static 用法總結

C/C++ static 用法總結

來源:程序員人生   發布時間:2014-12-22 08:44:01 閱讀次數:2423次


                             static用法


  a.靜態局部變量,成為靜態局部變量(具有記憶功能和全局存儲權限)
  b.靜態全局變量(限制對應全局變量被被其他文件調用)
  c.靜態函數
  d.靜態類成員(標識此成員屬于類而非屬于某個特定對象)
  
 1.靜態局部變量
   1.1靜態局部變量在函數內定義,具有靜態存儲期限而不再是自動存儲期限,由于靜態存儲期限的變量具有永久的

      存儲單元,所以在全部程序存儲期間都會保存變量的值,雖然退出函數后變量仍然存在,但不能使用。


   1.2靜態局部變量始終具有塊作用域。(與自動變量作用域相同)


   1.3對基本類型的靜態局部變量在定義時若為賦初值,則系統自動賦值為0.


   1.4舉例以下:
     void static_local_variable()
     {
     static int count = 0;
     count++;
     }


     第1次進入此函數,靜態變量count被初始化為0(若不初始化,系統會自動初始化為0),接下來履行count++。

  而以后調用此函數則只履行count++.


     此函數與以下代碼實現一樣的功能:
     int count = 0;
     void fuc()
     {
       count++;
     }


  2.靜態全局變量
    2.1靜態存儲期限。猶如聲明為static的局部變量1樣,外部變量具有靜態存儲期限,存儲在外部變量中的值獎

       被永久的保存下來。


    2.2文件作用域。外部變量具有文件作用域;從變量被聲明的位置開始,1直到所在文件的末尾。因此,跟隨在

       外部變量以后聲明的所有函數都可以訪問。


    2.3舉例以下:
      //xxxx.cpp
      void fucOne()
      {
       sCount++;
       count++;
      }

      static int sCount = 0;
      int count = 0;

      void fucTwo()
      {
       sCount++;
       count++;
      }
      
      a.fucOne()定義在sCount和count變量之前,編譯時會提示未聲明標示符。而fucTwo()定義在兩變量以后,在

        fucTwo()中則可正常使用。且在其他.cpp文件中不可訪問。


      b.若兩個.cpp文件聲明了同名的全局變量,其本質為生命了兩個獨立的靜態全局變量。


      c.count變量則可同享,在xxx.h文件中對其聲明 extern int count;在任何1個包括此頭文件的.cpp文件中初始化1次便可同享此全局變量。而一樣的方法卻不適用于靜態變量。
      (強烈建議:不要將靜態/靜態變量定義在.h文件中)
  
  3.static函數
    3.1內部函數(static函數,不可再其他文件中調用)
      如果在1個原文件中定義的函數只能被此源文件使用,則在函數類型前加 static 關鍵字便可。(利用了

    static的文件作用域)


      舉例以下:
      static void fuc()
      {
      }


    3.2外部函數(可在其他文件中調用)
      
      舉例以下:
      
      //file.cpp
      [extern] void fuc()
      {
      }
      
      //main.cpp
      int main()
      {
       extern void fuc();
      }
      
    4.靜態類成員
      4.1 類的靜態成員可以是private的或public的。靜態數據成員可以是常量、指針、援用、類類型等。
      4.2 其靜態成員屬于類而非某個特定對象。其靜態成員函數中也不能使用this指針。
      4.2 類靜態成員的使用
        a.定義并初始化
          1般來講,不能在類的內部初始化靜態數據成員,相反的,必須在類的外部定義和初始化每一個靜態數據成

        員。


          舉例以下:
        //xxxx.h
        class A
        {
          private:
            static int count;//聲明
          public:
            static  void fuc();
        }
        
        int A::count = 0;//定義、初始化
        (注意:最好將靜態數據成員的定義初始化放在對應的.cpp文件中,若像如上定義,在此頭文件被屢次包括時,靜態成員會被重復定義)


        b.類內初始化
          如果某個數據成員的利用場景僅限于編譯器可以替換它的情況,則1個初始化的const或constexpr static不需要分別定義.
          舉例以下:
          
          class Account
          {
            public: 
              static doule fuc(){};
            private:
              static constexpr int NUM = 30;
              int array[NUM];
          }
          
          相反若它將用于值不能替換的場景中,則該成員必須有1條定義語句:
          舉例以下:
          constexpr int Account::NUM;//只定義,不初始化,初始化已在類內提供
          (建議:即便1個常量靜態數據成員在類內被初始化了,通常情況下也應當在類外定義1下該成員)
        
        c.靜態成員的兩個利用
          (1)靜態成員可以是不完全類型(不完全類型:只聲明,未定義)
          (2)可以用靜態成員作為默許實參

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 欧美日韩乱码毛片免费观看 | 啪啪国产视频 | 高清一区二区三区 | 亚洲性生活网站 | 国产亚洲精品久久久久久久网站 | 在线观看免费黄色网址 | 亚洲视频在线观看 | 激情综合亚洲欧美日韩 | 一区自拍| 欧美一区二区三区不卡 | 亚洲国产精品综合一区在线 | 亚洲 自拍 欧美 综合 | 欧美性高清极品猛交 | 亚洲图片偷拍自拍 | 欧美性最猛xxxx在线观看视频 | 四虎必出精品亚洲高清 | 亚洲精品视频在线观看视频 | 欧美黑人ⅹxxx片 | 亚洲乱码在线 | 亚洲国产精品欧美综合 | h网站在线观看 | 亚洲一区二区三区精品视频 | 国内精品一区二区 | 亚洲免费视频网 | 国产成人高清亚洲一区91 | 国产自在自拍 | 2019精品手机国产品在线 | 波多野结衣国产一区二区三区 | 大片刺激免费播放视频 | 国产成人高清精品免费5388密 | 久久国产精品久久久 | 中文字幕国产在线 | 午夜久久久 | 欧美一级级毛片 | 日本一区二区三区不卡在线视频 | 国产精品欧美亚洲区 | 99久久国产综合精品女不卡 | 在线免费欧美 | 亚洲 在线播放 | 欧美 日韩 高清 | 欧美笫一页 |