我的秋招之路之c++中static的用法
?
c++的內(nèi)存分布如上圖所示。
對(duì)于一個(gè)完整的程序,在內(nèi)存中的分布情況如下圖: ?
1.棧區(qū): 由編譯器自動(dòng)分配釋放,像局部變量,函數(shù)參數(shù),都是在棧區(qū)。會(huì)隨著作用于退出而釋放空間。
3.堆區(qū):程序員分配并釋放的區(qū)域,像malloc(c),new(c++)?
3.全局?jǐn)?shù)據(jù)區(qū)(靜態(tài)區(qū)):全局變量和靜態(tài)便令的存儲(chǔ)是放在一塊的,初始化的全局變量和靜態(tài)變量在一塊區(qū)域,未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另一塊區(qū)域。程序結(jié)束釋放。
4.代碼區(qū)
靜態(tài)局部變量的特點(diǎn):
(1)該變量在全局?jǐn)?shù)據(jù)區(qū)分配內(nèi)存(局部變量在棧區(qū)分配內(nèi)存);
(2)靜態(tài)局部變量在程序執(zhí)行到該對(duì)象的聲明處時(shí)被首次初始化,即以后的函數(shù)調(diào)用不再進(jìn)行初始化(局部變量每次函數(shù)調(diào)用都會(huì)被初始化);
(3)靜態(tài)局部變量一般在聲明處初始化,如果沒(méi)有顯式初始化,會(huì)被程序自動(dòng)初始化為0(局部變量不會(huì)被初始化);
(4)它始終駐留在全局?jǐn)?shù)據(jù)區(qū),直到程序運(yùn)行結(jié)束。但其作用域?yàn)榫植孔饔糜?#xff0c;也就是不能在函數(shù)體外面使用它(局部變量在棧區(qū),在函數(shù)結(jié)束后立即釋放內(nèi)存);
.靜態(tài)全局變量:
定義在函數(shù)體外,用于修飾全局變量,表示該變量只在本文件可見(jiàn)。
作用域:該文件內(nèi)部, 生存期:整個(gè)程序運(yùn)行期間
可以隔離文件
.靜態(tài)函數(shù):
靜態(tài)函數(shù)跟靜態(tài)全局變量的作用類似,即靜態(tài)函數(shù)不能被其它文件所用。
其它文件中的可以定義相同的名字的函數(shù),不會(huì)發(fā)生沖突
作用域:該文件內(nèi)部, 生存期:整個(gè)程序運(yùn)行期間
靜態(tài)成員函數(shù)
1.靜態(tài)成員之間可以相互訪問(wèn),包括靜態(tài)成員函數(shù)訪問(wèn)靜態(tài)數(shù)據(jù)成員和訪問(wèn)靜態(tài)成員函數(shù);
2.非靜態(tài)成員函數(shù)可以任意地訪問(wèn)靜態(tài)成員函數(shù)和靜態(tài)數(shù)據(jù)成員;
3.靜態(tài)成員函數(shù)不能訪問(wèn)非靜態(tài)成員函數(shù)和非靜態(tài)數(shù)據(jù)成員;
4.調(diào)用靜態(tài)成員函數(shù),可以用成員訪問(wèn)操作符(.)和(->)為一個(gè)類的對(duì)象或指向類對(duì)象的指針調(diào)用靜態(tài)成員函數(shù),也可以用類名::函數(shù)名調(diào)用(因?yàn)樗緛?lái)就是屬于類的,用類名調(diào)用很正常)
參考資料:
原文鏈接:https://blog.csdn.net/chenyijun/article/details/81938287
總結(jié)
以上是生活随笔為你收集整理的我的秋招之路之c++中static的用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: xgboost、随机森林和逻辑回归的优缺
- 下一篇: c++工程师面试常见问题之c++中四种c