国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

static在C和C++中的用法和區別

2019-11-08 00:10:08
字體:
來源:轉載
供稿:網友

static主要有三個作用:

 

(1)局部靜態變量

(2)外部靜態變量/函數

(3)靜態數據成員/成員函數

前兩種C和C++都有,第三種僅在C++中有,下面分別作以下介紹:

一、局部靜態變量

 

在C/C++中, 局部變量按照存儲形式可分為三種auto, static, register。其中register不常用到,下面主要說說auto和static的區別。

 

1. 存儲空間分配和生存周期不同

 

auto類型局部變量就是普通的局部變量(不加修飾的局部變量默認為該類型)。該類型局部變量存儲在棧上,在動態存儲區,生命周期僅限于定義它的函數,函數結束,它就自動釋放。static類型局部變量存儲在靜態存儲區,在程序整個運行期間都不釋放。兩者之間的作用域相同,但生存期不同。

2. static局部變量在所處模塊在初次運行時進行初始化工作,且只操作一次。

 

3. 對于局部靜態變量,如果不賦初值,編譯期會自動賦初值0或空字符,而auto類型的初值是不確定的。(對于C++中的class對象例外,class的對象實例如果不初始化,則會自動調用默認構造函數,不管是否是static類型)

 

特點: static局部變量的”記憶性”與生存期的”全局性”

 

 

二、外部靜態變量/函數

在C中 static有了第二種含義:用來表示不能被其它文件訪問的全局變量和函數。但為了限制全局變量/函數的作用域, 函數或變量前加static使得函數成為靜態函數。但此處“static”的含義不是指存儲方式,而是指對函數的作用域僅局限于本文件(所以又稱內部函 數)。注意此時, 對于外部(全局)變量, 不論是否有static限制, 它的存儲區域都是在靜態存儲區,生存期都是全局的. 此時的static只是起作用域限制作用, 限定作用域在本模塊(文件)內部.

使用內部函數的好處是:不同的人編寫不同的函數時,不用擔心自己定義的函數,是否會與其它文件中的函數同名。

 

三、靜態數據成員/成員函數(C++特有)

C+ +重用了這個關鍵字,并賦予它與前面不同的第三種含義:表示屬于一個類而不是屬于此類的任何特定對象的變量和函數. 這是與普通成員函數的最大區別,也是其應用所在, 比如在對某一個類的對象進行計數時, 計數生成多少個類的實例,就可以用到靜態數據成員. 在這里面, static既不是限定作用域的, 也不是擴展生存期的作用, 而是指示變量/函數在此類中的唯一性. 這也是”屬于一個類而不是屬于此類的任何特定對象的變量和函數”的含義. 因為它是對整個類來說是唯一的,因此不可能屬于某一個實例對象的. (針對靜態數據成員而言, 成員函數不管是否是static, 在內存中只有一個副本, 普通成員函數調用時, 需要傳入this指針, static成員函數調用時, 沒有this指針. )


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 于都县| 汶川县| 邻水| 屯昌县| 体育| 合肥市| 邳州市| 名山县| 玉屏| 柏乡县| 松溪县| 二连浩特市| 花莲市| 桦南县| 长沙县| 镇宁| 平乐县| 南康市| 永福县| 鄂尔多斯市| 汶上县| 潍坊市| 墨玉县| 郯城县| 南开区| 建湖县| 崇阳县| 盐边县| 潞城市| 鹰潭市| 苗栗县| 峨山| 岳普湖县| 宁化县| 博兴县| 霍山县| 遂宁市| 大同县| 游戏| 通道| 博野县|