最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++ static的作用解讀

 更新時間:2023年02月21日 10:09:28   作者:SP FA  
這篇文章主要介紹了C++ static的作用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

1. 隱藏

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

下面是一個簡單的例子:

假設我們要編譯兩個文件 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 就無法使用它們了。利用這一特性可以避免命名沖突。

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

2. 保持變量內容的持久

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

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

int func(void)
{
?? ?static int count = 10; //僅在初始化時被執(zhí)行了一次,靜態(tài)變量只會進行一次初始化
?? ?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

全局變量也有這一特點,因為它也存儲在靜態(tài)數(shù)據(jù)區(qū)。

在靜態(tài)數(shù)據(jù)區(qū)中,所有的字節(jié)默認值都是 0x00,利用這一特點可以減少工作量。

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

4. 多個對象之間數(shù)據(jù)共享

在類中,靜態(tài)成員可實現(xiàn)多個對象的數(shù)據(jù)共享,而且由于隱藏的特點,它也同時保證了安全性。

靜態(tài)成員的初始化格式:<數(shù)據(jù)類型><類名>:: <靜態(tài)成員名>=<值>

  • 初始化在類體外進行,而且前面不加 static,以免與靜態(tài)變量或對象混淆。
  • 初始化時不加訪問權限控制符 private public 等
  • 初始化時用作用域運算符標明它所屬的類。由此也可以看出靜態(tài)數(shù)據(jù)成員是類的成員,而不是對象的成員。

引用靜態(tài)數(shù)據(jù)成員的格式:<類名>:: <靜態(tài)成員名>

下面是幾個例子:

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

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

報錯,因為非靜態(tài)數(shù)據(jù)成員此時還沒有分配內存。

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;
}

報錯,因為靜態(tài)成員變量需要進行初始化。

5. 注意

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

不能將靜態(tài)成員函數(shù)定義為虛函數(shù)。

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

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

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

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • C++條件及循環(huán)語句的綜合運用實例

    C++條件及循環(huán)語句的綜合運用實例

    這篇文章主要介紹了C++條件及循環(huán)語句的綜合運用實例,能夠幫助C++初學者更好地掌握C++的邏輯語句用法,需要的朋友可以參考下
    2015-09-09
  • C++代碼實現(xiàn)貪吃蛇小游戲

    C++代碼實現(xiàn)貪吃蛇小游戲

    這篇文章主要為大家詳細介紹了C++貪吃蛇小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • ffmpeg?在?win平臺下的編譯以及集成

    ffmpeg?在?win平臺下的編譯以及集成

    這篇文章主要為大家介紹了ffmpeg?在?win平臺下的編譯以及集成詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2023-05-05
  • 詳解C++中的成員訪問運算符和指針到成員運算符

    詳解C++中的成員訪問運算符和指針到成員運算符

    這篇文章主要介紹了C++中的成員訪問運算符和指針到成員運算符,即. 和 ->以及.* 和 ->*的使用方法,需要的朋友可以參考下
    2016-01-01
  • c語言獲取當前工作路徑的實現(xiàn)代碼(windows/linux)

    c語言獲取當前工作路徑的實現(xiàn)代碼(windows/linux)

    這篇文章主要介紹了c語言獲取當前工作路徑的實現(xiàn)代碼(windows/linux),需要的朋友可以參考下
    2017-09-09
  • C++日期類(Date)實現(xiàn)的示例代碼

    C++日期類(Date)實現(xiàn)的示例代碼

    這篇文章主要為大家詳細介紹了如何利用C++語言實現(xiàn)日期類(Date),可以實現(xiàn)確定某年某月有多少天、打印日期等功能,感興趣的可以了解一下
    2022-07-07
  • C++實現(xiàn)LeetCode(174.地牢游戲)

    C++實現(xiàn)LeetCode(174.地牢游戲)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(174.地牢游戲),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • C語言詳細分析宏定義的使用

    C語言詳細分析宏定義的使用

    宏定義是用宏名來表示一個字符串,在宏展開時又以該字符串取代宏名,這只是一種簡單的替換。字符串中可以含任何字符,可以是常數(shù),也可以是表達式,預處理程序對它不作任何檢查,如有錯誤,只能在編譯已被宏展開后的源程序時發(fā)現(xiàn)
    2022-04-04
  • C++如何實現(xiàn)DNS域名解析

    C++如何實現(xiàn)DNS域名解析

    這片文章介紹了C++如何實現(xiàn)DNS域名解析,還有對相關技術的介紹,代碼很詳細,需要的朋友可以參考下
    2015-07-07
  • C語言用數(shù)組實現(xiàn)反彈球消磚塊

    C語言用數(shù)組實現(xiàn)反彈球消磚塊

    這篇文章主要為大家詳細介紹了C語言用數(shù)組實現(xiàn)反彈球消磚塊,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05

最新評論

乡宁县| 皋兰县| 琼海市| 鲁甸县| 邻水| 东阿县| 泸水县| 高尔夫| 通化县| 丁青县| 岫岩| 本溪市| 那坡县| 昌都县| 军事| 麦盖提县| 永州市| 休宁县| 上犹县| 安福县| 清流县| 阿巴嘎旗| 罗城| 紫阳县| 镇康县| 黄浦区| 偏关县| 葵青区| 大方县| 会同县| 元朗区| 西华县| 岱山县| 循化| 镇原县| 綦江县| 虎林市| 神池县| 宁国市| 兰州市| 融水|