欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c++ static詳細(xì)使用分析

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

一.定義

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

二.各種類型分析

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

  • 靜態(tài)成員變量是類的屬性,它在所有類實(shí)例之間共享,只有一個(gè)副本。
  • 靜態(tài)成員變量在類內(nè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,因?yàn)閏ount是靜態(tài)成員變量,被所有類實(shí)例共享
    return 0;
}

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

  • 靜態(tài)局部變量在函數(shù)內(nèi)部聲明,并在程序的整個(gè)生命周期內(nèi)保持其值,而不是在每次函數(shù)調(diào)用時(shí)重新初始化。
  • 靜態(tài)局部變量只在函數(shù)第一次被調(diào)用時(shí)初始化,之后保持其值。
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)函數(shù):

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

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

1.單例模式(Singleton Pattern):

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

2.計(jì)數(shù)器變量:

使用靜態(tài)成員變量實(shí)現(xiàn)計(jì)數(shù)器功能,用于統(tǒng)計(jì)類的實(shí)例數(shù)量。
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.輔助函數(shù):

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

4.緩存數(shù)據(jù):

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

四.static內(nèi)存分配

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

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

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

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

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

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

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

總結(jié)起來(lái),靜態(tài)成員變量在程序啟動(dòng)時(shí)進(jìn)行內(nèi)存分配和初始化,而靜態(tài)局部變量在其所在函數(shù)第一次被調(diào)用時(shí)進(jìn)行內(nèi)存分配和初始化。

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

相關(guān)文章

  • 淺談Qt信號(hào)與槽的各種連接方式

    淺談Qt信號(hào)與槽的各種連接方式

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

    C++函數(shù)模板與類模板相同與不同介紹

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

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

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

    C語(yǔ)言怎么獲得進(jìn)程的PE文件信息

    這篇文章主要介紹了C語(yǔ)言怎么獲得進(jìn)程的PE文件信息的相關(guān)代碼,需要的朋友可以參考下
    2016-01-01
  • C++實(shí)現(xiàn)隨機(jī)生成迷宮地牢

    C++實(shí)現(xiàn)隨機(jī)生成迷宮地牢

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

    如何寫好C main函數(shù)的幾個(gè)注意事項(xiàng)

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

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

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

    CrashRpt使用案例詳解

    這篇文章主要介紹了CrashRpt使用案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • win10中的dlib庫(kù)安裝過(guò)程

    win10中的dlib庫(kù)安裝過(guò)程

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

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

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

最新評(píng)論