最近一直在迷惑着這兩個關鍵字,感受大腦裏一片糊塗,特此整理一下: 函數
1、const 測試
一、數據常量,不能修改,必須初始化; this
1)非類的數據成員 spa
a、指向const對象的指針(remember) 設計
b、const指針(remember) 指針
2)做爲類的數據成員 對象
a、必須在構造函數中進行初始化,而且必須在初始化列表中進行初始化; 生命週期
引伸:必須對任何const或引用類型成員以及沒有默認構造函數的類類型的額任何成員使用初始化式; 作用域
二、const成員函數 rem
做爲類的const成員函數,const關鍵字放在函數聲明的後面,在函數定義時,也必須將const關鍵字放在函數的後面(對於static不是這樣)。
1)設計const成員函數主要是不改變對象,正由於這樣一個const成員函數不可能再聲明爲static,由於static加在成員函數上就代表該函數屬於類而不屬於類對象;
2)const成員函數能夠被const對象或者非const對象調用,當被const對象調用時,函數中的this指針就變成了一個指向const對象的const指針(由於this指針本書就是一個const指針,它就是指向調用該函數的對象);
2、static
靜態的;
一、對於對象進行修飾
1)對於全局變量加上static關鍵字後其存儲位置沒有變,仍是在全局存儲區,可是縮小了其做用域,生命週期也沒有變;
2)對於局部變量加上static關鍵字後,其存儲位置發生改變,存在全局存儲區,做用域沒有變,生命週期變了;
3)對於類的數據成員(屬於類),加上static關鍵字後,在類定義出進行聲明,還必須在.cpp文件進行定義;對於static整型數據成員,能夠在類定義時進行賦值,但還必須在.cpp文件進行定義;
2)對於函數進行修飾
1)static成員函數(屬於類),在類定義處進行函數的聲明,要加上static關鍵字,在.cpp文件處進行定義的時候static關鍵字不用再加了;
3、初始化
在這裏又想說一下對象的初始化
對於具備類類型的對象,會調用其所屬類的默認構造函數實現初始化。內置類型的對象的初始化依賴於對象如何定義。若是對象在全局做用域定義(即不在任何函數中)或定義爲靜態局部對象,則這些成員將被初始化爲0。若是對象在局部做用域中定義,則這些對象沒有初始化,除了給他們賦值之外,出於其餘任何目的對未初始化成員的使用都是有問題的;
見本身的測試