學習總結:拷貝構造函數、常量摺疊、堆\棧

一、關於拷貝構造函數
1、相同類型的類對象是通過拷貝構造函數來完成整個複製過程的
2、拷貝構造函數是一種特殊的構造函數,函數的名稱必須和類名稱一致,它必須的一個參數是本類型的一個引用變量;
3、三種情況下會調用拷貝構造函數:對象以值傳遞的方式傳入函數參數、對象以值傳遞的方式從函數返回、對象需要通過另外一個對象進行初始化;
相關博文:

二、常量摺疊
1、編譯器進行語法分析的時候,將常量表達式計算求值,並用求得的值來替換表達式,放入常量表;
2、const定義的變量a=10,編譯時會進行優化,即只要代碼中遇到這個變量a,就會從常量表中找到對應的那個常量10來替換這個變量a,相當於宏定義;
3、所以就算我們把存儲const變量a的內存內容改了,改成了20,打印變量a時仍然是打印出10.

三、C/C++中堆和棧的理解
1、C++程序內存分爲6個區:
(1)棧區——由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。其操作方式類似於數據結構中的棧。
(2)堆區——(new/delete)一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收 
(3)全局/靜態區——全局變量和靜態變量被分配到同一塊內存中。
(4)自由存儲區——由malloc等分配的內存塊,他和堆是十分相似的, 不過它是用free來結束自己的生命的。
(5) 常量存儲區——這是一塊比較特殊的存儲區,他們裏面存放的是常量,不允許修改。程序結束後由系統釋放。
(6)程序代碼區—— 存放函數體的二進制代碼。
相關博文:
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章