中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++?static的作用是什么

發布時間:2023-02-22 17:49:03 來源:億速云 閱讀:123 作者:iii 欄目:開發技術

這篇“C++ static的作用是什么”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“C++ static的作用是什么”文章吧。

1. 隱藏

當同時編譯多個文件時,所有未加 static 前綴的全局變量和函數都具有全局可見性。

下面是一個簡單的例子:

假設我們要編譯兩個文件 a.c 和 main.c

// a.c
char a = 'A';
void msg()
{
    printf("Hello\n");
}
//main.c
int main(void)
{
    extern char a;
    print(“%c ”, a);
    (void)msg();
    return 0;
}

此時程序運行的結果是:

A Hello

而如果在 a 和 msg 定義前加了 static,那么 main.c 就無法使用它們了。利用這一特性可以避免命名沖突。

對于函數來說,static 的作用僅限于隱藏。而對于變量來說,它還有其他作用。

2. 保持變量內容的持久

儲存在靜態數據區的變量會在程序剛開始運行時完成它唯一的一次初始化,它與全局變量一起儲存在靜態存儲區,只不過 static 的作用域不一定是全局的。

說到底,這其實也可以理解為一種隱藏。

int func(void)
{
    static int count = 10; //僅在初始化時被執行了一次,靜態變量只會進行一次初始化
    return count—-;
}

int count = 1;

int main(void)
{
    printf(“global\t\tlocal static\n”);
    for (; count<=10; count++)
    {
        printf(“%d\t\t%d\n”, count, func());
    }
    return 0;
}

3. 默認初始化為 0

全局變量也有這一特點,因為它也存儲在靜態數據區。

在靜態數據區中,所有的字節默認值都是 0x00,利用這一特點可以減少工作量。

如初始化一個稀疏矩陣,就能省去把所有位置置 0 的操作。

4. 多個對象之間數據共享

在類中,靜態成員可實現多個對象的數據共享,而且由于隱藏的特點,它也同時保證了安全性。

靜態成員的初始化格式:<數據類型><類名>:: <靜態成員名>=<值>

  • 初始化在類體外進行,而且前面不加 static,以免與靜態變量或對象混淆。

  • 初始化時不加訪問權限控制符 private public 等

  • 初始化時用作用域運算符標明它所屬的類。由此也可以看出靜態數據成員是類的成員,而不是對象的成員。

引用靜態數據成員的格式:<類名>:: <靜態成員名>

下面是幾個例子:

class Point
{
public:
    void output() {}
    static void init()
    {
        x = 0;
        y = 0;
    }
private:
    int x;
    int y;
}

int main(void)
{
    Point:: init();
    return 0;
}

報錯,因為非靜態數據成員此時還沒有分配內存。

class Point
{
public:
    void output() {}
    static void init()
    {
        x = 0;
        y = 0;
    }
private:
    static int x;
    static int y;
}

int main(void)
{
    Point:: init();
    return 0;
}

報錯,因為靜態成員變量需要進行初始化。

5. 注意

類的靜態成員函數屬于整個類,因此沒有 this 指針,這就導致了它僅能訪問靜態數據和靜態成員函數。

不能將靜態成員函數定義為虛函數。

對靜態成員進行取地址操作會有些特殊,變量地址是指向其數據類型的指針,函數地址類型是一個 “nonmember 函數指針”。

由于沒有 this 指針,所以相當于 nonmember 函數,這就有一個好處:成為一個 callback 函數,使得我們將 C++ 和 C-based X Window 系統結合,也成功應用于線程函數身上。

父類和子類共享靜態成員。為了防止父類的影響,可以在子類中定義一個與父類相同的靜態變量,以屏蔽父類的影響。這不會引起錯誤,因為編譯器采用了 name-mangling 方法以生成唯一的標志。

以上就是關于“C++ static的作用是什么”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

凭祥市| 吉安县| 荃湾区| 双峰县| 寿宁县| 开化县| 抚顺县| 奉节县| 类乌齐县| 乐昌市| 城市| 瑞丽市| 军事| 徐汇区| 栾川县| 略阳县| 海淀区| 无棣县| 兴宁市| 永平县| 古浪县| 马龙县| 宣汉县| 凤冈县| 龙州县| 宁德市| 灌云县| 五寨县| 游戏| 昭平县| 乐陵市| 新疆| 山丹县| 新源县| 巩义市| 顺义区| 汝阳县| 韩城市| 双城市| 台前县| 云安县|