測試程序如下(在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就是把限定它前面的類型。