靜態的

static 儲存類說明符有三種不同的含義。

  1. 為在名稱空間範圍內宣告的變數或函式提供內部連結。

    // internal function; can't be linked to
    static double semiperimeter(double a, double b, double c) {
        return (a + b + c)/2.0;
    }
    // exported to client
    double area(double a, double b, double c) {
        const double s = semiperimeter(a, b, c);
        return sqrt(s*(s-a)*(s-b)*(s-c));
    }
    
  2. 宣告一個變數具有靜態儲存持續時間(除非它是 thread_local)。名稱空間範圍變數是隱式靜態的。靜態區域性變數只初始化一次,第一次控制通過其定義,並且每次退出其範圍時都不會被銷燬。

    void f() {
        static int count = 0;
        std::cout << "f has been called " << ++count << " times so far\n";
    }
    
  3. 當應用於類成員的宣告時,宣告該成員是靜態成員

    struct S {
        static S* create() {
            return new S;
        }
    };
    int main() {
        S* s = S::create();
    }
    

請注意,對於類的靜態資料成員,2 和 3 同時應用:static 關鍵字使成員成為靜態資料成員並使其成為具有靜態儲存持續時間的變數。