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