指针本身是常量不可变 int * const p2=&me;//p2不可变,*p2可变,此时允许*p2来修改其值,但是p2不能转向。 (char*) const pContent; const (char*) pContent; 指针所指向的内容是常量不可变 const (char) *pContent; (char) const *pContent; const int * p1=&me;//p1可变,*p1不可变,此时不能用*p1来修改,但是p1可以转向 const int *const p3=&me;//p3不可变,*p3也不可变,此时既不能用*p3来修改其值,也不能转向 const指针可以接受const和非const地址,但是非const指针只能接受非const地址。所以const指针的能力更强一些,所以尽量多用const指针,这是一种习惯。 限定函数的传递值参数: void function(const int Var); //传递过来的参数在函数内不可以改变. 限定函数返回值型. const int function(); //此时const无意义 const myclassname function(); //函数返回自定义类型myclassname. a.const int fun1() //这个其实无意义,因为参数返回本身就是赋值。 b. const int * fun2() //调用时 const int *pValue = fun2(); //我们可以把fun2()看作成一个变量,即指针内容不可变。 c.int* const fun3() //调用时 int * const pValue = fun2(); //我们可以把fun2()看作成一个变量,即指针本身不可变。 限定函数类型. void function()const; //常成员函数, 常成员函数是不能改变成员变量值的函数。 //表明函数内不会对成员变量加以运算处理 非常量成员函数不能被常量成员对象调用,因为它可能企图修改常量的数据成员: class Set { public: Set (void){ card = 0; } bool Member(const int) const; void AddElem(const int); //... }; const Set s; s.AddElem(10); // 非法: AddElem不是常量成员函数 s.Member(10); // 正确 4、类相关CONST (1)const修饰成员变量 const修饰类的成员函数,表示成员常量,不能被修改,同时它只能在初始化列表中赋值。 class A { … const int nValue; //成员常量不能被修改 … A(int x): nValue(x) { } ; //只能在初始化列表中赋值 } (2)const修饰成员函数 const修饰类的成员函数,则该成员函数不能修改类中任何非const成员函数。一般写在函数的最后来修饰。 class A { … void function()const; //常成员函数, 它不改变对象的成员变量. //也不能调用类中任何非const成员函数。 } 对于const类对象/指针/引用,只能调用类的const成员函数,因此,const修饰成员函数的最重要作用就是限制对于const对象的使用。 a. const成员函数不被允许修改它所在对象的任何一个数据成员。 b. const成员函数能够访问对象的const成员,而其他成员函数不可以。 (3)const修饰类对象/对象指针/对象引用 · const修饰类对象表示该对象为常量对象,其中的任何成员都不能被修改。对于对象指针和对象引用也是一样。 · const修饰的对象,该对象的任何非const成员函数都不能被调用,因为任何非const成员函数会有修改成员变量的企图。 例如: class AAA { void func1(); void func2() const; } const AAA aObj; aObj.func1(); × aObj.func2(); 正确 const AAA* aObj = new AAA(); aObj-> func1(); × aObj-> func2(); 正确