const限定符

Posted ygeloutingyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了const限定符相关的知识,希望对你有一定的参考价值。

const能对变量加以限定,使其值不可修改。如:

const int inf = 0x3f3f3f3f;

任何试图修改变量inf的值的操作都将引起编译错误。

因为 const 对象一旦创建后就不能修改,所以const对象必须初始化。

 

const的引用:

可以把引用绑定到const对象上,就像绑定到其他对象上一样,我们称之为对常量的引用。与普通引用不同的是,对常量的引用不能用作修改其对象的值。

如:

const int x = 0;

const int &p = x;

任何尝试修改p的值的操作都将引发编译错误。虽然不能直接修改const int &变量的值,不过在某些情况下可以间接修改const int &变量的值。

如:

对const的引用可以引用一个非const的对象,可以通过改变非const对象的值来改变const的引用的值。

1 int x = 0;
2 
3 const int &p = x;
4 
5 x += 1;
6 
7 cout << p << " " << x << endl;//输出1 1

因为x不是const变量,其值可以被修改,而p是x的引用,修改x的值即修改了p的值。

const的引用可以可以初始化为一个字面常量,如:

const int &p = 0;

 

指针和const:

与引用一样,也可以令指针指向常量或非常量。类似于常量引用,指向常量的指针不能用于改变其所指对象的。想要存放常量对象的地址只能用对应的常量指针。而常量指针可以指向对应的非常量对象,这点是和常量引用一样的。

1 const int cnt1 = 0;
2 
3 int cnt2 = 1;
4 
5 const int p1 = &cnt1;
6 
7 const int p2 = &cnt2;

 

指向const对象的指针:

const int cnt = 1;

const int *p = &cnt;

上述语句声明的是一个指向常量int变量的指针。所谓指向常量的指针仅仅要求不能通过改变指针来改变对象的值,而没有规定该对象的值不能通过其它途径改变。因为指针p本身并不是一个常量,因此可以令p指向另外一个对象。

即:

 1 const int cnt = 1;
 2 
 3 const int *p = &cnt;
 4 
 5 *p += 1;
 6 
 7 //是非法的
 8 
 9 const int cnt = 1;
10 
11 const int x = 0;
12 
13 const int *p = &cnt;
14 
15 p = &x;
16 
17 //是合法的

 

const 指针:

int cnt = 0;

int *const p = &cnt;

通过从右往左解读p的声明语句可以知道,首先p是一个const变量,然后是一个指向int性的指针。因此与上面的p不能改变对象的值但可以指向另外一个对象相反,这里的p可以改变其所指的对象的值,但p本身的值不能改变,即不能指向其他的对象。

即:

 1 int cnt = 0;
 2 
 3 int x = 1;
 4 
 5 int *const p = &cnt;
 6 
 7 p = &x;
 8 
 9 //是不合法的
10 
11 int cnt = 0;
12 
13 int *const p = &cnt;
14 
15 *p += 1;
16 
17 //是合法的

 

指向常量的常量指针:

const int cnt = 1;

const int *const p = &cnt;

上述语句声明的是一个指向常量的常量指针。即不能通过改变p来改变p所指的对象的值,也不能改变p的值(p不能指向其它对象)。

 

顶层 const 和底层 const :

顶层const表示指针本身是一个常量,底层const表示指针所指的对象是一个常量。顶层const和底层const是相互独立的。

更一般的,顶层const可以表示任意对象本身是一个常量,这一点对任何数据类型都适用,如算术类型,类,指针等。底层const则与指针和引用等符合类型的基本类型部分有关。比较特殊的是指针类型既可以是顶层const也可以是底层const,这一点和其他类型区别明显。

以上是关于const限定符的主要内容,如果未能解决你的问题,请参考以下文章

2.4 const限定符

C++杂谈const限定符与const指针

Const限定符和前向引用

const限定符

const 不兼容的类型限定符问题

const限定符用法汇总