C++ auto變數

Roninwz發表於2017-10-11
auto:用來宣告自動變數。它是儲存型別識別符號,表明變數(自動)具有本地範圍,塊範圍的變數宣告(如for迴圈體內的變數宣告)預設為auto儲存型別。
其實大多普通宣告方式宣告的變數都是auto變數,他們不需要明確指定auto關鍵字,預設就是auto的了。auto變數在離開作用域是會變程式自動釋放,不會發生記憶體溢位情況(除了包含指標的類)。使用auto變數的優勢是不需要考慮去變數是否被釋放,比較安全吧。
new:new是用來在堆上申請記憶體地址的關鍵字,他產生的變數不會自動釋放,除非delete來手動釋放,或者程式結束時由作業系統釋放,使用new的優勢是記憶體使用比較靈活,理論可以申請任意大小的記憶體區塊(實際與作業系統有關),但這很容易產生問題,一不小心忘記釋放物件,特別是在頻繁呼叫的函式內建立的物件忘記釋放時,會產生記憶體溢位,嚴重時導致程式出錯,系統崩潰。new一般都是在類的定義中使用,結合delete可以使包含new出來物件的類也具有自帶變數功能,這樣就繼承了兩種方式的優勢。
--------------------------------------------------------------
另外,最新的C++標準更新了auto關鍵字的功能
除了具有原有的含義外,還增加了一種類似其他高階語言的型別推導特性
使用auto來代替變數的型別,
前提是被明確型別的初始化變數初始化的,可以使用auto關鍵字
比如int i=10; auto a = i; //這樣a也是int型別了
這在使用一些模板類的時候,對於減少冗贅的程式碼也很有用
---------------------------------------------------------------

static變數是程式接收的時候才釋放物件的,但它不需要手動釋放。
static如果在一個函式內申明,這每次進入這個函式時,還是使用第一次宣告的變數,並且還儲存的上次使用的值(auto變數這時函式結束是即釋放了,再次呼叫這個函式是,有重新定義了一個新的變數)

static變數如果在結構和類中使用,這結構或類定義的一切物件,都將共享唯一static變數。

轉載來自:http://blog.csdn.net/stopbl/article/details/77942025

相關文章