您的位置:首页 > 其它

const限定符

2015-09-15 13:25 267 查看

const限定符号有很多用处,但是它限制的对象和一般的对象有很多不同,下面来总结一下.

[1]const限定符号只在本文件内有效.因为编译器在编译的过程中要将所有的const对象替换成为它的初始值,所以它必须知道该对象的初始值.因此每一个文件都必须有一个const对象的定义.为了不引起冲突,那C++就限定了美国文件内的const对象都是独立的.

[2]但是有的时候const对象的初始值不是一个常量而是一个表达式,但又确实要在各个文件里面共享,这时候我们需要它像普通变量一样在一个文件内定义,在多个文件声明.这个时候就需要在定义和声明前面都加上extern.

[3]const限定的引用:常量引用指的是该引用是一个常量的引用.它在初始化时可以用任意表达式作为初始值.(const int &r2 = i*2)因为编译器这个时候会生成一个临时的常量对象并且将常量引用绑定到该临时量上面.由于常量引用只是为了使用对象的值,所以绑定在临时量上面也是没有关系的,它不会去试图改变它.通过常量引用改变对象是不可以的,但是如果对象不是常量对象,那么可以通过其他方式改变,比如直接对该对象赋值(int x = 1;const int &i = x;x = 2(legal);i = 1(illegal))

[4]指向常量的指针(const int *p),这样的指针可以指向非常量,但是不能通过这个指针去改变这个非常量.

[5]const指针(int * const p),从右到左阅读这个定义式,指针本身是一个常量,它指向其他类型的对象.指针本身是不能被修改的,但是可以通过指针修改它所指向的对象.

[6]所有const变量都必须被初始化.

题目:

(1)int * p1,i,*const p2;//illegal 没有初始化 p2

(2)const int *p,ic;//legal

(3)const int *const p3;//没有初始化p3 ,p3 是一个常量指针,它指向一个整形常量

(4)const int &const i//illegal,i 是一个常量对象,它不能同时是一个引用.如果它是引用,它就不能是一个对象.

(5) p1 = p3(illegal,指针类型不一样)

(6) p3 = &ic(illegal,p3是一个const指针,不能被改变)

(7)ic = *p3(illegal,ic是一个const对象)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: