1. const修饰指针的四种情况
int b = 500; const int *a = &b; // 情况1 int const *a = &b; // 情况2 int* const a = &b; // 情况3 const int* const a = &b; // 情况4
(1)情况1
const位于*号的左侧,则const用来修饰指针所指向的变量。
const位于*号的右侧,则const用来修饰指针本身。
那么,情况1中*a的值是常量。换句话说,如果a是仓库管理员,他所进入的仓库,里面的货物(*a)是他没有权限动的(不允许*a=600)。
但是也有办法去改变*a的值,一种是通过改变b,另一种是使a指向别处(管理员换个仓库,如a++)。
(2)同1。
(3)指针本身是常量,就像a是仓库管理员,他只能进入指定的某个仓库,而不能去别的仓库(不能a++),但是里面的货物(*a)是可以随意动的(允许*a=600)。
对于这种情况,定义同时必须初始化。
(4)指针本身和指向的内容的不能动。
2. C++类中的const用法
我们定义的类的成员函数中,有一些函数要修改类数据成员的值,有一些函数不要修改类的数据成员。将不需要修改成员变量的函数加上const关键字可以提高程序的可读性、可靠性,在该成员函数中,一旦企图修改数据成员的值或调用另一个非const成员函数,编译器会报错。
具体例子如下:
class Point { int xVal, yVal; public: int GetY() const; }; // 关键字const必须用同样的方式重复出现在函数实现中,否则编译器会把它看成一个不同的函数 int Point::GetY() const { return yVal; } // 注意不能写成const int Point::GetY()
如果把const放在函数声明前面,意味着函数的返回值是常量,