關於const的思考

測試程序如下(在VC8的編譯器下):

class Test
{
public:
 int i;
};

void main()
{
 Test t;
 
 //下面兩種const的方式是一樣的,都是限定Test這個類
 const Test * * pp1;  //語句“(*pp1)->i = 100;”會產生編譯錯誤
 Test const* * pp2;  //語句“(*pp2)->i = 100;”會產生編譯錯誤
 
 //const限定Test*指針類型,說明pp3指向一個const型的指針
 Test * const* pp3;   //語句“(*pp3) = &t”會產生編譯錯誤
 
 //const限定Test**指針類型,所以必須初始化,否則會產生編譯錯誤
 Test * * const pp4 = NULL;


 //下面兩種方式是一樣的,表示引用的對象是cosnt型的
 const Test& r1 = t;  //語句“r1.i = 100;”會產生編譯錯誤
 Test const & r2 = t; //語句“r2.i = 100;”會產生編譯錯誤
 
 //本意表示r3爲const型的引用,但是引用本身就是const型的,所以沒有意義
 Test & const r3 = t; //編譯器報C4227警告,說明這種寫法是過時的

總之一句話,const就是把限定它前面的類型。

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