在c语言中const只能限定一个变量不允许被修改,产生静态作用,提高安全性。
在c++中const可以修饰类中的成员变量、成员函数,也可以修饰全局或者局部变量。
1)修饰变量
被const修饰的变量的值无法被修改,而在c++中,我们把被const修饰的变量成为一个常量,它的值只能并且必须在初始化的时候就给出。
2)修饰指针
被const修饰过得指针就会变得特别奇妙(指针向来很奇妙)
const在 * 之前
const int * 等价于 int const *
我一直以为被const修饰的指针的值无法修改(const在*之前),其实这个描述特别不准确
实际上不是不能改,只是不能通过该指针来进行修改,下图直接对原变量进行修改。
const 在 * 之后
表示指针的指向无法修改(c++禁止将const的地址赋给非const的地址)因为我一个被限制无法修改指向的指针指向了一个可能会发生改变的变量,编译器发现有这样一种发生改变的可能就会主动报错。
3)修饰引用
如下,使用const来修饰引用,则无法通过该引用来修改a的值,但可以通过a来进行修改
实际上引用的本质也就是一个指针。 const int& arr --> const int *ptr 二者是等价的。
另外的,如下代码,使用int类型的引用arr来指向double类型的变量是不行的,但是使用const int& arr指向a是可以的,这是因为double与const int之间发生了隐式类型转换,在内存中重新开辟了一块空间,使其保存着截取a的值。
这是因为double 与 const int之间发生了隐身类型转换,重新创建了一块int类型的临时空间,将d中的整形部分截取保存在了这个临时空间中。
C++ Const 对引用造成的影响 http://t.csdn.cn/ME9ON
4)Const 在类中的使用(以下博客较为完整)
Const在类中的使用http://t.csdn.cn/HDfAg
5)const修饰函数参数
const修饰的函数参数,代表该参数内容在本函数体内无法被改变,不过只对指针和引用有作用,对传值参数没有什么作用,因为传值只是拷贝了实参的一块数据,本身就是无法修改实参的。