const关键字

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放在函数声明前面,意味着函数的返回值是常量,

posted @ 2018-02-27 22:12  in4ight  阅读(122)  评论(0编辑  收藏  举报