亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

c++ static詳細使用分析

 更新時間:2024年05月20日 11:46:09   作者:激昂~逐流  
在C++中,static是一個關鍵字,用于聲明靜態(tài)成員、靜態(tài)局部變量以及靜態(tài)函數,這篇文章主要介紹了c++ static詳細分析,需要的朋友可以參考下

一.定義

在C++中,static是一個關鍵字,用于聲明靜態(tài)成員、靜態(tài)局部變量以及靜態(tài)函數。

二.各種類型分析

1.靜態(tài)成員變量:

  • 靜態(tài)成員變量是類的屬性,它在所有類實例之間共享,只有一個副本。
  • 靜態(tài)成員變量在類內聲明,在類外定義和初始化。
class MyClass {
public:
    static int count; // 靜態(tài)成員變量聲明
};
int MyClass::count = 0; // 靜態(tài)成員變量定義和初始化
int main() {
    MyClass obj1;
    MyClass obj2;
    obj1.count = 2;
    cout << obj2.count; // 輸出為2,因為count是靜態(tài)成員變量,被所有類實例共享
    return 0;
}

2.靜態(tài)局部變量:

  • 靜態(tài)局部變量在函數內部聲明,并在程序的整個生命周期內保持其值,而不是在每次函數調用時重新初始化。
  • 靜態(tài)局部變量只在函數第一次被調用時初始化,之后保持其值。
void myFunction() {
    static int count = 0; // 靜態(tài)局部變量
    count++;
    cout << count << endl;
}
int main() {
    myFunction(); // 輸出1
    myFunction(); // 輸出2
    myFunction(); // 輸出3
    return 0;
}

3.靜態(tài)函數:

  • 靜態(tài)函數是屬于類的函數,不依賴于類的實例,可以直接通過類名調用。
  • 靜態(tài)函數不能訪問非靜態(tài)成員變量,只能訪問靜態(tài)成員變量。
class MyClass {
public:
    static void myStaticFunction() {
        cout << "This is a static function." << endl;
    }
};
int main() {
    MyClass::myStaticFunction(); // 直接通過類名調用靜態(tài)函數
    return 0;
}

三.實際開發(fā)中static的用法

1.單例模式(Singleton Pattern):

使用靜態(tài)成員函數和靜態(tài)成員變量創(chuàng)建單例類,確保只有一個實例存在。
class Singleton {
public:
    static Singleton& getInstance() {
        static Singleton instance;
        return instance;
    }
    void doSomething() {
        // ...
    }
private:
    Singleton() {} // 私有構造函數,防止外部創(chuàng)建實例
};
int main() {
    Singleton& obj = Singleton::getInstance();
    obj.doSomething();
    return 0;
}

2.計數器變量:

使用靜態(tài)成員變量實現計數器功能,用于統(tǒng)計類的實例數量。
class Counter {
public:
    Counter() {
        count++;
    }
    ~Counter() {
        count--;
    }
    static int getCount() {
        return count;
    }
private:
    static int count; // 靜態(tài)成員變量
};
int Counter::count = 0; // 靜態(tài)成員變量初始化
int main() {
    Counter obj1;
    Counter obj2;
    cout << Counter::getCount() << endl; // 輸出2
    return 0;
}

3.輔助函數:

使用靜態(tài)函數作為輔助函數,不依賴于類的實例,可以直接調用。
class MathUtils {
public:
    static int add(int a, int b) {
        return a + b;
    }
};
int main() {
    int sum = MathUtils::add(5, 3); // 調用靜態(tài)函數
    cout << sum << endl; // 輸出8
    return 0;
}

4.緩存數據:

使用靜態(tài)局部變量作為緩存,避免重復計算或頻繁的資源獲取操作。
int getData() {
    static int cache = fetchData(); // 靜態(tài)局部變量作為緩存
    return cache;
}
int main() {
    int data = getData(); // 第一次調用需要獲取數據
    data = getData(); // 后續(xù)調用直接使用緩存數據
    return 0;
}

四.static內存分配

在C++中,靜態(tài)成員變量和靜態(tài)局部變量的內存分配時機是不同的。

1.靜態(tài)成員變量的內存分配:

  • 靜態(tài)成員變量在程序啟動時進行內存分配,無論是否創(chuàng)建類的實例。
  • 內存分配發(fā)生在程序的靜態(tài)數據區(qū)(static data segment)。
  • 靜態(tài)成員變量的初始化在其首次使用之前進行,通常在程序啟動時進行。

2.靜態(tài)局部變量的內存分配:

  • 靜態(tài)局部變量在其所在的函數第一次被調用時進行內存分配。
  • 內存分配發(fā)生在程序的靜態(tài)數據區(qū)。
  • 靜態(tài)局部變量只在首次調用時進行初始化,之后保持其值。

需要注意的是,靜態(tài)局部變量和靜態(tài)成員變量的內存分配和初始化時機是在編譯時確定的,與程序的執(zhí)行流程無關。靜態(tài)局部變量和靜態(tài)成員變量的生命周期和作用域與其所在的函數或類相關。

另外,靜態(tài)局部變量和靜態(tài)成員變量的作用域是在定義它們的函數或類范圍內可見。靜態(tài)局部變量的作用域是局部的,只在定義它們的函數內可見。而靜態(tài)成員變量的作用域是類級別的,可以通過類名訪問。

總結起來,靜態(tài)成員變量在程序啟動時進行內存分配和初始化,而靜態(tài)局部變量在其所在函數第一次被調用時進行內存分配和初始化。

到此這篇關于c++ static詳細分析的文章就介紹到這了,更多相關c++ static內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 淺談Qt信號與槽的各種連接方式

    淺談Qt信號與槽的各種連接方式

    信號和槽是Qt特有的信息傳輸機制,本文主要介紹了淺談Qt信號與槽的各種連接方式,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • C++函數模板與類模板相同與不同介紹

    C++函數模板與類模板相同與不同介紹

    C++語言的模板技術包括函數模板和類模板,模板技術是一種代碼重用技術,函數和類是C++語言中兩種主要的重用代碼形式,這篇文章主要介紹了C++函數模板和類模板,需要的朋友可以參考下
    2022-08-08
  • C++中 靜態(tài)局部變量實例詳解

    C++中 靜態(tài)局部變量實例詳解

    這篇文章主要介紹了C++中 靜態(tài)局部變量實例詳解的相關資料,需要的朋友可以參考下
    2017-03-03
  • C語言怎么獲得進程的PE文件信息

    C語言怎么獲得進程的PE文件信息

    這篇文章主要介紹了C語言怎么獲得進程的PE文件信息的相關代碼,需要的朋友可以參考下
    2016-01-01
  • C++實現隨機生成迷宮地牢

    C++實現隨機生成迷宮地牢

    這篇文章主要介紹了C++實現隨機生成迷宮地牢的相關資料及代碼分享,推薦給大家,有需要的小伙伴可以參考下。
    2015-03-03
  • 如何寫好C main函數的幾個注意事項

    如何寫好C main函數的幾個注意事項

    這篇文章主要介紹了如何寫好C main函數的幾個注意事項,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-06-06
  • Qt QChart 創(chuàng)建圖表的實現方法

    Qt QChart 創(chuàng)建圖表的實現方法

    這篇文章主要介紹了Qt QChart 創(chuàng)建圖表的實現方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • CrashRpt使用案例詳解

    CrashRpt使用案例詳解

    這篇文章主要介紹了CrashRpt使用案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • win10中的dlib庫安裝過程

    win10中的dlib庫安裝過程

    這篇文章主要介紹了win10中dlib庫的安裝過程,本文通過實例圖文介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • c++深入淺出講解堆排序和堆

    c++深入淺出講解堆排序和堆

    在c++里有很多排序方法,比如相對簡單的冒泡排序、選擇排序、插入排序,還有 STL里的sort函數  手寫快排  歸并排序等,還有就是堆排序,這次主要說堆排序和堆
    2022-03-03

最新評論