程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C/C++ static用法

C/C++ static用法

編輯:C++入門知識

這篇文章沒有太多的實際內容,簡單記錄下static的用法。順便試一下用markdown來寫文章。

1. 在函數中使用

我們都知道在一個函數中的變量是存儲在棧區中,函數的每一次調用都伴隨著變量的重新定義和銷毀。如果在變量前面加上static關鍵字,這個變量就會在程序的靜態存儲區。這個變量只會在第一次調用函數的時候定義並初始化。當再次調用函數時,會保留上次的值。例子:

int showNum()
{
    static int num = 0;
    return num++;
}
int main()
{
    for(int i=0;i<10;i++)
    {
        cout << showNum() << endl;
    }
    return 0;
}//打印0到9

2. 在類中使用

這裡面規則有點多,我直接上代碼,然後比較好說明:

class X{
    int i;
    static int j;
public:
    X(int ii = 6) : i(ii){
        //非靜態成員函數可以訪問靜態成員函數和變量
        j = i;
    }
    int val(){return j;}
    static int incr(){
        return ++j;
    }
    static int f()
    {
        return incr();
    }
};
int X::j = 0;
int main()
{
    X x;
    X* xp = &x;
    cout << x.f() << endl;
    cout << xp->f() << endl;
    cout << X::f() << endl;
    cout << sizeof(X) << endl;
    return 0;
}

有下面幾個要點:

上面sizeof(X)的結果是4,說明靜態成員變量j是放在靜態存儲區域。每個對象的成員變量都是獨立的,而靜態成員是所有對象共享,它沒有this指針,所以靜態成員函數只能訪問靜態成員變量。

3. translation unit 隱藏

這個translation unit我也不知道該怎麼翻譯,就理解為一個源文件吧。static還有一個作用就是,聲明為static的變量和函數只在該文件(translation unit)有效,在其他文件中不能訪問。這在大型工程中,能有效避免命名重復。

markdown寫東西果然爽,不過以前中文格式看習慣了,誰能告訴我,首行縮進兩個字這個需求該怎麼辦到。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved