C++中的const用法

来源:互联网 发布:南昌金域名都 小姐 编辑:程序博客网 时间:2024/06/05 01:53

今天学习了const的用法,记录到博客方便以后查看。

在程序中,我们总不能避免使用一些常数,如等。在C语言中,我们常用宏定义来解决类似问题,但是宏定义有一个很大的缺陷:编译器无法看到所定义的常数的含义。预处理器盲目的将符号替换成数字,当出现错误时,编译器给出的错误是关于那个常数的而不是定义的符号,给程序排错造成了一定的困难;而且预处理器盲目的将符号替换为数字,会造成有多份目标代码的出现。使用const定义的常量就能够很好地解决上述问题。下面简要的说明const在用的时候需要注意什么。

1)       因为我们无法改变const变量的数值,在定义const变量后一定要初始化。在初始化const变量时,可以用nonconst变量初始化,因为const提供的约束只会约束能够改变const变量值的操作。

2)       多个文件使用同一个const变量时,正确的做法如下:

在实现的文件里(.cpp,.cc等):externconst int bufsize = 10;

在头文件里(.h): extern const int bufsize;

3)       Const变量的引用。

Const变量的引用和普通变量的引用有一个很大的差别在于:普通变量的引用的类型必须和被引用变量的类型一致;而对于const变量的引用,则只要能够强制转换为const变量的引用的类型就行,可以是一个nonconst变量、常数或者一个表达式。这里有一点需要强调:一个const变量的引用只是约束了我们能够对这个引用进行的操作,对于这个引用所引用的对象并没有任何要求和说明,可以是const也可以是nonconst的。

一个普通引用的对象不可以是const,而一个const变量的引用的对象可以是nonconst。

4)       Const指针。和引用类似,一个指向const的指针不能用来改变指针指向的内存的值。同样的一个指向const的指针也可以指向nonconst,道理同变量的引用:定义一个指针为指向const的指针,只是影响了我们能够对这个指针进行的操作,与这个指针所指向的对象无关。

指向const的指针只是约束我们不能改变该指针指向的对象的值,但是这个指针的值是可以改变的;因此可以定义一个const指针,表明该指针的值是不可以改变的。

 

int  ic;

const int *p1 = ⁣//指向const的指针,可以不初始化

int  *const p2 =⁣//const 指针,必须初始化。

const int *const p3 = ⁣//指向const的const指针,必须初始化

 

p1 = p2;//合法

p2 = p1;//不合法,因为可以通过p2改变p1指向对象的值

 

这里还有一种top-level const 和low-level const的概念,top-levelconst是指变量本身是个常量,low-level const是指变量指向或引用的对象是一个常量。const变量的引用和指向const的指针都是属于low-level const,const指针和其他的const变量属于top-level const。当在复制const变量时,top-level const相当于普通变量,而low-level const不能。复制low-levelconst变量时,两者的必须都是low-level const或者从nonconst复制到const,反之则不行。


0 0
原创粉丝点击