天天看點

static

  之前沒注意static這個關鍵詞,被人問到的時候竟然不知道= =!果斷補補

  1.全局變量與靜态全局變量,全局變量可以在聲明的情況下,在項目的各個檔案通用,靜态全局變量就隻能在目前定義的檔案下使用。

  1)全局變量是不顯式用static修飾的全局變量,但全局變量預設是動态的,作用域是整個工程,在一個檔案内定義的全局變量,在另一個檔案中,通過extern 全局變量名的聲明,就可以使用全局變量。

  2)全局靜态變量是顯式用static修飾的全局變量,作用域是聲明此變量所在的檔案,其他的檔案即使用extern聲明也不能使用。

  2.靜态局部變量與局部變量

  靜态局部變量在全局資料區中,而局部變量在記憶體棧中,是以函數結束,局部變量被釋放,而靜态不被釋放,依舊保留上一次的結果。

  

  3.全局函數與靜态全局函數

  作用域的不同,跟全局變量與靜态全局變量的作用局機制類似。

  4.非靜态資料成員與靜态資料成員

  對于非靜态資料成員,每個類對象都有自己的拷貝。而靜态資料成員被當作是類的成員。無論這個類的對象被定義了多少個,靜态資料成員在程式中也隻有一份拷 貝,由該類型的所有對象共享通路。也就是說,靜态資料成員是該類的所有對象所共有的。對該類的多個對象來說,靜态資料成員隻配置設定一次記憶體,供所有對象共 用。是以,靜态資料成員的值對每個對象都是一樣的,它的值可以更新;

  5.成員函數與靜态成員函數

  與靜态資料成員一樣,我們也可以建立一個靜态成員函數,它為類的全部服務而不是為某一個類的具體對象服務。靜态成員函數與靜态資料成員一樣,都是類的内部 實作,屬于類定義的一部分。普通的成員函數一般都隐含了一個this指針,this指針指向類的對象本身,因為普通成員函數總是具體的屬于某個類的具體對象的。通常情況下,this 是預設的。如函數fn()實際上是this->fn()。但是與普通函數相比,靜态成員函數由于不是與任何的對象相聯系,是以它不具有this指 針。從這個意義上講,它無法通路屬于類對象的非靜态資料成員,也無法通路非靜态成員函數,它隻能調用其餘的靜态成員函數。

  優點:由于沒有this指針的額外開銷,是以靜态成員函數與類的全局函數相比速度上會有少許的增長;

  缺點:靜态成員函數隻能通路靜态資料成員

參考:http://baike.baidu.com/link?url=37ec8nxdprs4p6sjyvk52tfctaq5aiowtioq-hcebrxwhlbdlr9w7srytv1okfdk