码迷,mamicode.com
首页 > 其他好文 > 详细

const限定符

时间:2017-11-25 22:36:51      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:直接   特殊   cout   地址   情况   数据类型   指针   基本类型   不同的   

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限定符

标签:直接   特殊   cout   地址   情况   数据类型   指针   基本类型   不同的   

原文地址:http://www.cnblogs.com/geloutingyu/p/7896501.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!