目录
const 限定符
使用变量的好处是当我们觉得变量值不合适时可以随时调整,但是这也会带来弊端,比如容易无意间改变了它的值,为了避免这种情况,可以用关键字const对变量的类型加以限定。
初始化
用const限定符
定义的对象必须初始化。
在指针和引用这篇博客中,我曾介绍了对于const 指针和const 引用的初始化方式。
其实const类型的对象能执行大部分非const类型对象的操作,只有对const类型的对象执行改变其内容的操作时,该限定符才起作用,不仅如此,如果利用一个对象去初始化另外一个对象,则它们是不是const都无所谓
。
int i = 10;
const int ci = i; //正确:i的值被拷贝给了ci
int j = ci; //正确:ci的值被拷贝给了j
拷贝一个对象的值并不会改变被拷贝对象的值,一旦拷贝完成,新的对象和被拷贝对象就是两个独立的对象
const修饰指针
顶层const
:指针本身是个常量
低层const
:指针所指向的对象是个常量或者引用绑定的对象是一个常量
- 对于对象类型为
基本数据类型
和类
情况,其const都是顶层const
class A {
public:
int val;
};
int main()
{
const int i = 10; //不能改变i的值,这是一个顶层const
const double d = 1.2; //不能改变d的值,这是一个顶层const
const char c = 'a'; //不能改变c的值,这是一个顶层const
const A object_A; //不能改变object_A的值,这是一个顶层const
return 0;
}
- 对于对象类型是
指针
的情况,其对象即可以是顶层const,也可以是底层const
int i = 10;
int j = 20;
const int *p1 = &i; //允许改变指针p1的值,即可以改变其指向,但不允许改变i的值,这是一个底层const
p1 = &j; //使p1从指向i改为指向j
cout << *p1 << endl; //输出j的值,20
int* const p2 = &i; //允许改变i的值,但是不允许改变指针