最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

C++避坑---關(guān)鍵字static的使用及注意事項(xiàng)

2023-03-27 13:59 作者:艱默  | 我要投稿


C++避坑系列


static關(guān)鍵字可用于聲明變量、函數(shù)、類數(shù)據(jù)成員和類函數(shù)。其主要影響著它們的生命周期、作用域和存儲位置。

static在普通變量和函數(shù)中的使用

  • static修飾局部變量

    默認(rèn)情況下static修飾后作用域函數(shù)內(nèi)部函數(shù)內(nèi)部存儲位置棧靜態(tài)區(qū)生命周期局部(函數(shù)調(diào)用開始,函數(shù)執(zhí)行完成時結(jié)束)全局(函數(shù)調(diào)用開始,到程序執(zhí)行完成時結(jié)束)

    默認(rèn)情況下,局部變量(定義在函數(shù)內(nèi)部的變量)的作用域僅限于函數(shù)內(nèi)部,只有函數(shù)被調(diào)用的時候才被初始化(存儲于棧空間)和使用,函數(shù)執(zhí)行完畢的時候被釋放,而被static修飾后,其作用域不變,但是存儲位置變?yōu)殪o態(tài)區(qū),且生命周期延長(直到程序運(yùn)行結(jié)束后才被釋放)。

?

輸出結(jié)果為:

  • static修飾全局變量

    默認(rèn)情況下static修飾后作用域整個程序當(dāng)前文件存儲位置靜態(tài)區(qū)靜態(tài)區(qū)生命周期全局全局

    默認(rèn)情況下,全局變量(在所有塊的外部定義變量)的作用域是整個程序,存儲位置為靜態(tài)區(qū),生命周期也與程序的生命周期相同。當(dāng)其被static修飾后,其存儲位置和生命周期不會改變,但其作用域變?yōu)楫?dāng)前文件。



  • static修飾函數(shù)

    static修飾函數(shù)的作用與修飾全局變量的作用類似,即將函數(shù)的作用域由整個程序變?yōu)楫?dāng)前文件。



static在類中的使用

在類定義中,關(guān)鍵字static聲明不綁定到類的實(shí)例對象。static在類中常用的使用場景主要有:

  • 修飾類的數(shù)據(jù)成員:即靜態(tài)成員,該成員不關(guān)聯(lián)到任何對象,即使不定義該類的任何對象它也存在,其生存周期大于該類的對象,其作為類的成員,由該類的所有對象共同訪問。靜態(tài)成員存儲于全局?jǐn)?shù)據(jù)區(qū),由于要給靜態(tài)成員分配空間,因此普通的靜態(tài)成員不能在類的聲明中定義。其定義以及使用方法如下:

??


  • 修飾類的成員函數(shù):即靜態(tài)成員函數(shù),該函數(shù)與靜態(tài)成員一樣,不關(guān)聯(lián)到任何對象。調(diào)用時,它們沒有this指針。靜態(tài)成員函數(shù)不能是 virtual、const volatile 的。靜態(tài)成員函數(shù)的地址可以存儲在常規(guī)的函數(shù)指針中,但不能存儲在成員函數(shù)指針中。其定義及使用方法如下:



介紹完static的使用方式和方法后,我們通過一個完整的例子,總結(jié)一下其使用時的注意事項(xiàng),例子如下:


輸出結(jié)果如下:


從上述例子和輸出結(jié)果可以得出:

  • 靜態(tài)數(shù)據(jù)成員不關(guān)聯(lián)到類對象,且只初始化一次,單獨(dú)存儲。

  • 普通的靜態(tài)成員不能在類的聲明中定義,需要在類的外面單獨(dú)初始化。

  • 靜態(tài)成員函數(shù)能夠訪問靜態(tài)成員,但不能訪問非靜態(tài)數(shù)據(jù)成員和非靜態(tài)成員函數(shù)(因?yàn)榉庆o態(tài)數(shù)據(jù)成員和函數(shù)是與類的對象綁定的,但靜態(tài)成員函數(shù)不關(guān)聯(lián)任何對象,且調(diào)用時,它們沒有this指針。)。

總 結(jié)

在使用關(guān)鍵字static的時候,我們需要注意一下幾個原則:

  • static修飾的變量的存儲位置都在靜態(tài)區(qū),且生命周期延長至整個程序運(yùn)行結(jié)束。

  • static具有隔離作用,被static修飾的全局變量和全局函數(shù)的作用域由全局變?yōu)楫?dāng)前文件。

  • 靜態(tài)變量雖然具有全局變量的生命周期,但只能作用于自己的作用域。

  • 普通靜態(tài)成員需要在類的外面進(jìn)行初始化。

  • 靜態(tài)成員函數(shù)不能調(diào)用類的非靜態(tài)成員,包括非靜態(tài)成員和非靜態(tài)成員函數(shù)。

參考文獻(xiàn)

《C++ reference》

文章首發(fā)公眾號:iDoitnow 如果喜歡話,可以關(guān)注一下


C++避坑---關(guān)鍵字static的使用及注意事項(xiàng)的評論 (共 條)

分享到微博請遵守國家法律
松江区| 手机| 淄博市| 彰武县| 淮滨县| 久治县| 明光市| 乌兰察布市| 玉环县| 石嘴山市| 丹寨县| 重庆市| 沂源县| 云浮市| 墨竹工卡县| 通榆县| 特克斯县| 札达县| 九寨沟县| 阿克陶县| 含山县| 仁布县| 彭山县| 嘉禾县| 沙坪坝区| 静海县| 博乐市| 罗城| 巧家县| 武冈市| 邹平县| 葫芦岛市| 梓潼县| 澄城县| 措美县| 从江县| 平泉县| 三穗县| 宁南县| 海伦市| 手游|