const 用法:
1. const修饰普通变量,在普通变量定义的前面加上const,变量就不能被重新赋值
2. const修饰指针的写法有点复杂:
const int *p 与 int const *p完全等价,他们修饰的是*p,也就是*p不能被重新赋值,也就是被指向的对象
int * const p则不一样,它修饰的是p,也就是说p这个指针内存的地址不能动了,但是这个地址指向的变量还可以被重新赋值。
3. const修饰引用:
const可以修饰引用: int x=3; const int &y=x; 这个例子中,const修饰的是y,y是不能被重新赋值的
4. const修饰函数形参,则表明在函数中,只能读取该形参,不能修改这个形参,以免误操作。
5. const 修饰函数的返回值:如给“指针传递”的函数返回值加const,则返回值不能被直接修改,且该返回值只能被赋值给加const修饰的同类型指针。例如:
const char *GetChar(void){};
char *ch = GetChar(); //错误
const char *ch = GetChar(); //正确
const在类中的用法:
1. 使用const修饰类的数据成员,这样做之后,这个类一旦被初始化后,它的数据成员就不能再被改变!
2. 更复杂的是,用const修饰类的成员函数,这样做后,这个常成员函数,不能对该类的数据成员进行修改!
原因在于,对于常成员函数,编译器编译的时候,它会这样认为:
也就是说它会认为函数参数中的this指针被修饰为const,那么this指针指向的数据成员就不能被改变了。
任何不会修改数据成员的函数都应用const修饰,这样,当不小心修改了数据成员或调用了非const成员函数时,编译器都会报错。
类的常成员函数只能由const类来调用,非const类是不能调用常成员函数的!!
调用常成员函数应该这样写: