关键字const:
1、用关键字const定义变量指所定义的常量。即恒定的变量,即不可改变的变量。
例: const int i=10;
此时 i 就是一个整型的常量,其值不能改变。
在C++中如果用const定义一个对象,那么对象中的成员变量就是常数,不能改变(只能为初始化的值),如果用const定义类中的成员函数,那么这个函数就不能去改变对象的成员变量。(相当于this指针为指向常量的指针)
例: const Car car;//Car为类 car为定义的对象 car为常量
2、const与#define 的区别:
#define 的特点是纯粹的文本替换,不存在类型的问题,而const 定义的常量则是有类型的常量,这样编译器可以更多的察觉错误。
3、当 指针 遇到 const 时:
const int *p;//指向整型常量的指针,即指向的是常量,指针也可以指向的别的地址,但指向的常量的值是不能改变的。
int * const p;//指向整型变量的常量指针,即指向的地址不可以改变,但指向的是变量,是可以赋值的
const int * const p;/指向整型常量的常量指针。
大家首先了解一个例子:
const int *p; //指向整型常量的指针
int i=10,j=10; //
p=&i; //指针指向i 正确
p=&j; //指针指向j 正确
*p=1; //错误
j=10; //正确
指向常量的指针,其指向的对象可以改变,但其指向的内容不允许改变!!!
在C++中有一个const指针的应用,就是在函数传参的时候,本来传值就能解决的问题,但是考虑到程序的稳定性,有如下分析:(假如所传的值是一个对象)
1、如果这个对象很大,所以传值的话,会很浪费内存和时间,并且在子函数开始和结束要调用构造函数和析构函数。
2、如果传入指针的话,就是把对象的地址传入了,这样对象的成员变量就被暴露了,本意是不改变对象的成员变量,但这样会存在隐患。所以我们想到利用const指针,传入的是指向常量的指针。即:(const Car *p或const Car * const p)的形式。这样,在函数中就不会改变对象的成员变量了,也不存在对象拷贝的问题。
3、(C++中)还是上面这个问题,使用引用照样能解决问题,比const指针还方便些,用(const Car &rp)