C++ 筆記 靜態局部變量、類的靜態成員和靜態方法

static修飾的成員變量在對象中是不佔內存的,因爲他不是跟對象一起在堆或者棧中生成,用static修飾的變量在靜態存儲區生成的,所以用static修飾一方面的好處是可以節省對象的內存空間。

類中的static數據成員需要在類之外進行初始化。

由於static修飾的類成員屬於類,不屬於對象,因此static類成員函數是沒有this指針的,this指針是指向本對象的指針。正因爲沒有this指針,所以static類成員函數不能訪問非static的類成員,不能調用非靜態的成員函數,只能訪問 static修飾的類成員,可以直接通過類名調用

在局部變量前,加上關鍵字static,該變量就被定義成爲一個靜態局部變量。可作爲對象間的一種通信機制。

靜態局部變量有以下特點:

●該變量在全局數據區分配內存;

●靜態局部變量在程序執行到該對象的聲明處時被首次初始化,即以後的函數調用不再進行初始化;

●靜態局部變量一般在聲明處初始化,如果沒有顯式初始化,會被程序自動初始化爲0;

●它始終駐留在全局數據區,直到程序運行結束。但其作用域爲局部作用域,當定義它的函數或語句塊結束時,其作用域隨之結束(但其本身還留存在全局數據區,只是函數結束,沒有能操作它的對象了);

靜態函數

  在函數返回類型前加static,函數就定義爲靜態函數。函數的定義和聲明在默認情況下都是extern的,但靜態函數只是在聲明他的文件當中可見,不能被其他文件所用。函數的實現使用static修飾,那麼這個函數只可在本cpp內使用,不會同其他cpp中的同名函數引起衝突;

  注意:不要在頭文件中聲明static的全局函數,不要在cpp內聲明非static的全局函數,如果你要在多個cpp中複用該函數,就把它的聲明提到頭文件裏去,否則cpp內部聲明需加上static修飾。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章