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

C++ static的使用方法及不同含義講解

 更新時(shí)間:2025年04月18日 16:47:11   作者:Vesan,  
在 C++ 里,static 是一個(gè)用途廣泛的關(guān)鍵字,在不同場(chǎng)景下有不同含義,下面通過(guò)實(shí)例代碼介紹C++ static的使用方法及不同含義講解,感興趣的朋友一起看看吧

在 C++ 里,static 是一個(gè)用途廣泛的關(guān)鍵字,在不同場(chǎng)景下有不同含義,下面為你詳細(xì)介紹:

1. 全局變量前的 static

當(dāng) static 用在全局變量前時(shí),它會(huì)改變變量的鏈接屬性。

  • 默認(rèn)全局變量:默認(rèn)的全局變量具有外部鏈接屬性,這意味著在一個(gè)文件中定義的全局變量可以在其他文件中通過(guò) extern 關(guān)鍵字聲明后使用。
  • 靜態(tài)全局變量:在全局變量前加上 static 關(guān)鍵字后,變量變?yōu)殪o態(tài)全局變量,具有內(nèi)部鏈接屬性,只能在定義它的文件中使用,其他文件無(wú)法訪問(wèn)。

示例代碼

// file1.cpp
#include <iostream>
// 靜態(tài)全局變量
static int staticGlobalVar = 10; 
// 普通全局變量
int globalVar = 20; 
void printStaticGlobalVar() {
    std::cout << "Static global variable: " << staticGlobalVar << std::endl;
}
// file2.cpp
#include <iostream>
// extern int staticGlobalVar; // 錯(cuò)誤,無(wú)法在其他文件中訪問(wèn)靜態(tài)全局變量
extern int globalVar;
int main() {
    // std::cout << staticGlobalVar << std::endl; // 錯(cuò)誤
    std::cout << "Global variable: " << globalVar << std::endl;
    return 0;
}

2. 局部變量前的static

當(dāng) static 用于局部變量時(shí),它會(huì)改變變量的存儲(chǔ)方式和生命周期。

  • 普通局部變量:普通局部變量存儲(chǔ)在棧上,在函數(shù)調(diào)用結(jié)束后會(huì)被銷毀。
  • 靜態(tài)局部變量:靜態(tài)局部變量存儲(chǔ)在全局?jǐn)?shù)據(jù)區(qū),只在第一次調(diào)用函數(shù)時(shí)初始化,之后再次調(diào)用函數(shù)時(shí),靜態(tài)局部變量會(huì)保留上一次調(diào)用結(jié)束時(shí)的值。

示例代碼

#include <iostream>
void staticLocalVariableExample() {
    static int staticLocalVar = 0; // 靜態(tài)局部變量
    int normalLocalVar = 0; // 普通局部變量
    std::cout << "Static local variable: " << staticLocalVar << std::endl;
    std::cout << "Normal local variable: " << normalLocalVar << std::endl;
    staticLocalVar++;
    normalLocalVar++;
}
int main() {
    staticLocalVariableExample();
    staticLocalVariableExample();
    return 0;
}

3. 函數(shù)前的 static

當(dāng) static 用于函數(shù)前時(shí),它會(huì)改變函數(shù)的鏈接屬性。

  • 默認(rèn)全局函數(shù):默認(rèn)的全局函數(shù)具有外部鏈接屬性,可以在其他文件中通過(guò) extern 關(guān)鍵字聲明后調(diào)用。
  • 靜態(tài)函數(shù):在函數(shù)前加上 static 關(guān)鍵字后,函數(shù)變?yōu)殪o態(tài)函數(shù),具有內(nèi)部鏈接屬性,只能在定義它的文件中調(diào)用,其他文件無(wú)法訪問(wèn)。

示例代碼

// file1.cpp
#include <iostream>
// 靜態(tài)函數(shù)
static void staticFunction() {
    std::cout << "This is a static function." << std::endl;
}
// 普通函數(shù)
void normalFunction() {
    std::cout << "This is a normal function." << std::endl;
}
// file2.cpp
#include <iostream>
// extern void staticFunction(); // 錯(cuò)誤,無(wú)法在其他文件中調(diào)用靜態(tài)函數(shù)
extern void normalFunction();
int main() {
    // staticFunction(); // 錯(cuò)誤
    normalFunction();
    return 0;
}

4. 類的靜態(tài)成員變量

類的靜態(tài)成員變量屬于整個(gè)類,而不是類的某個(gè)對(duì)象,所有對(duì)象共享同一個(gè)靜態(tài)成員變量。

  • 存儲(chǔ)位置:靜態(tài)成員變量存儲(chǔ)在全局?jǐn)?shù)據(jù)區(qū),不隨對(duì)象的創(chuàng)建和銷毀而分配和釋放內(nèi)存。
  • 初始化:靜態(tài)成員變量必須在類外進(jìn)行初始化。

示例代碼

#include <iostream>
class MyClass {
public:
    static int staticMemberVar; // 類內(nèi)聲明靜態(tài)成員變量
    int normalMemberVar;
    MyClass(int value) : normalMemberVar(value) {}
};
// 類外初始化靜態(tài)成員變量
int MyClass::staticMemberVar = 0; 
int main() {
    MyClass obj1(10);
    MyClass obj2(20);
    obj1.staticMemberVar = 30;
    std::cout << "obj2.staticMemberVar: " << obj2.staticMemberVar << std::endl; // 輸出 30
    return 0;
}

5. 類的靜態(tài)成員函數(shù)

類的靜態(tài)成員函數(shù)屬于整個(gè)類,而不是類的某個(gè)對(duì)象,可以直接通過(guò)類名調(diào)用,也可以通過(guò)對(duì)象調(diào)用。

  • 無(wú) this 指針:靜態(tài)成員函數(shù)沒(méi)有 this 指針,因此不能訪問(wèn)類的非靜態(tài)成員變量和非靜態(tài)成員函數(shù),只能訪問(wèn)類的靜態(tài)成員變量和靜態(tài)成員函數(shù)。

示例代碼

#include <iostream>
class MyClass {
public:
    static int staticMemberVar;
    int normalMemberVar;
    static void staticMemberFunction() {
        staticMemberVar = 10; // 可以訪問(wèn)靜態(tài)成員變量
        // normalMemberVar = 20; // 錯(cuò)誤,不能訪問(wèn)非靜態(tài)成員變量
        std::cout << "Static member function called. staticMemberVar: " << staticMemberVar << std::endl;
    }
};
int MyClass::staticMemberVar = 0;
int main() {
    MyClass::staticMemberFunction(); // 通過(guò)類名調(diào)用靜態(tài)成員函數(shù)
    MyClass obj;
    obj.staticMemberFunction(); // 通過(guò)對(duì)象調(diào)用靜態(tài)成員函數(shù)
    return 0;
}

綜上所述,static 關(guān)鍵字在不同的位置有不同的含義,主要體現(xiàn)在改變變量和函數(shù)的鏈接屬性、存儲(chǔ)方式、生命周期以及實(shí)現(xiàn)類的共享成員等方面。

到此這篇關(guān)于C++ static的使用方法及不同作用的文章就介紹到這了,更多相關(guān)C++ static使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 利用Matlab復(fù)刻羊了個(gè)羊小游戲

    利用Matlab復(fù)刻羊了個(gè)羊小游戲

    最近羊了個(gè)羊游戲可謂是異常火爆,身邊幾乎都在玩,他其實(shí)就是一個(gè)簡(jiǎn)單的卡通背景消除闖關(guān)游戲,本文將用Matlab復(fù)刻這一游戲,感興趣的可以了解一下
    2022-09-09
  • C++中Qt的安裝與配置步驟詳解

    C++中Qt的安裝與配置步驟詳解

    Qt是一種C++編程框架,用于構(gòu)建圖形用戶界面(GUI)應(yīng)用程序和嵌入式系統(tǒng),無(wú)論是初學(xué)者還是經(jīng)驗(yàn)豐富的開(kāi)發(fā)者,Qt都為構(gòu)建高質(zhì)量、可維護(hù)的應(yīng)用程序提供了豐富的工具和支持,本文主要給大家介紹了C++中Qt的安裝與配置步驟,需要的朋友可以參考下
    2023-12-12
  • 在C語(yǔ)言里單引號(hào)和雙引號(hào)的區(qū)別

    在C語(yǔ)言里單引號(hào)和雙引號(hào)的區(qū)別

    這篇文章主要介紹了在C語(yǔ)言里單引號(hào)和雙引號(hào)的區(qū)別,本文通過(guò)代碼的實(shí)例和注釋的詳細(xì)的說(shuō)明了單引號(hào)和雙引號(hào)的概念與區(qū)別,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++實(shí)現(xiàn)學(xué)生檔案管理系統(tǒng)

    C++實(shí)現(xiàn)學(xué)生檔案管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)學(xué)生檔案管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Visual Studio2022+QT6創(chuàng)建桌面應(yīng)用實(shí)現(xiàn)

    Visual Studio2022+QT6創(chuàng)建桌面應(yīng)用實(shí)現(xiàn)

    本文主要介紹了Visual Studio2022+QT6創(chuàng)建桌面應(yīng)用實(shí)現(xiàn),文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-02-02
  • c++中虛函數(shù)和純虛函數(shù)的作用與區(qū)別

    c++中虛函數(shù)和純虛函數(shù)的作用與區(qū)別

    這篇文章主要介紹了c++中虛函數(shù)和純虛函數(shù)的作用與區(qū)別,需要的朋友可以參考下
    2014-07-07
  • C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)實(shí)例講解單鏈表的實(shí)現(xiàn)

    C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)實(shí)例講解單鏈表的實(shí)現(xiàn)

    單鏈表是后面要學(xué)的雙鏈表以及循環(huán)鏈表的基礎(chǔ),要想繼續(xù)深入了解數(shù)據(jù)結(jié)構(gòu)以及C++,我們就要奠定好這塊基石!接下來(lái)就和我一起學(xué)習(xí)吧
    2022-03-03
  • VSCode 使用 Code Runner 插件無(wú)法編譯運(yùn)行文件名帶空格的文件問(wèn)題

    VSCode 使用 Code Runner 插件無(wú)法編譯運(yùn)行文件名帶空格的文件問(wèn)題

    這篇文章主要介紹了VSCode 使用 Code Runner 插件無(wú)法編譯運(yùn)行文件名帶空格的文件問(wèn)題,本文通過(guò)圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-07-07
  • C語(yǔ)言實(shí)現(xiàn)考試報(bào)名管理系統(tǒng)

    C語(yǔ)言實(shí)現(xiàn)考試報(bào)名管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)考試報(bào)名管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C++實(shí)現(xiàn)飛機(jī)訂票系統(tǒng)

    C++實(shí)現(xiàn)飛機(jī)訂票系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)飛機(jī)訂票系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評(píng)論