C++ static

來源:互聯網
上載者:User

標籤:

本文主要記錄的C++中static的一些內容,內容簡單,僅僅作為梳理一下知識,如有錯誤請留言指出。

static的作用

  1. 在函數體,一個被聲明為static的變數,在這一函數被調用的過程裡,其數值維持不變。
  2. 在模組內(但在函數體外),一個被聲明的靜態變數可以被模組內的所有函數訪問,但是不能被模組外的函數訪問,是一個本地的全域變數
  3. 在模組內,一個被聲明為靜態函數只可能被這一模組內的其他函數調用,也就是這個函數被限制在聲明它的模組內使用。

總的來說,static控制了變數和函數的使用範圍(本機資料化和代碼範圍的控制)

static全域變數和普通全域變數的區別

全域變數和靜態全域變數都是靜態儲存方式。區別在於:非靜態全域變數的範圍是整個來源程式,當一個來源程式有多個源檔案組成時,非靜態全域變數在各個源檔案都有效,而靜態全域變數則限制了範圍,只定義了該靜態全域變數的源檔案有效,同一來源程式的其他源檔案不能使用它,使用靜態全域變數可以避免在其他源檔案中引起錯誤。

綜上:把局部變數改成靜態變數改變了它的儲存方式,及改變了它的生存期,把全域變數改為靜態變數,改變了它的範圍,限制了它的使用範圍。

  1. static全域變數與普通全域變數的區別:static全域變數只初始化一次,防止在其他檔案單元中被引用
  2. static局部變數與普通變數的區別:static全域變數只初始化一次,下一次依據上一次結果值。
  3. static函數與普通函數的區別:static函數在記憶體中只有一份,普通函數在每個被調用中維持一份複製品

C++類的待用資料和方法成員

類中的靜態成員和方法不屬於類的執行個體,而屬於類本身並在所有類的執行個體間共用。調用這些時,應用類名::來引用。

#include <iostream>using namespace std;class Widget{public:    Widget()    {        ++count;    }    ~Widget()    {        --count;    }    static int num()//靜態成員函數    {        return count;    }private:    static int count;//靜態私人資料成員};int Widget::count = 0;//int main(){    Widget x,y;    cout<<"The num is:"<<Widget::num()<<endl;    if(Widget::num()>1)    {        Widget x,y,z;        cout<<"The num is:"<<Widget::num()<<endl;    }    Widget z;    cout<<"The num is:"<<Widget::num()<<endl;    cout << "Hello World!" << endl;    return 0;}

C++ static

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.