欢迎来到天天文库
浏览记录
ID:32398831
大小:42.50 KB
页数:10页
时间:2019-02-04
《c语言--const的用法》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、C语言--const的用法1、什么是const?常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。(当然,我们可以偷梁换柱进行更新:)2、为什么引入const? const推出的初始目的,正是为了取代预编译指令,消除它的缺点,同时继承它的优点。3、cons有什么主要的作用?(1)可以定义const常量,具有不可变性。例如:constintMax="100";intArray[Max];(2)便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。例如:voidf(constinti){......
2、...}编译器就会知道i是一个常量,不允许修改;(3)可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。同宏定义一样,可以做到不变则已,一变都变!如(1)中,如果想修改Max的内容,只需要:constintMax="you"want;即可!(4)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。还是上面的例子,如果在函数体内修改了i,编译器就会报错;例如:voidf(constinti){i="10";//error!}(5)为函数重载提供了一个参考。classA{......voidf(inti){......}f
3、ile://一个函数voidf(inti)const{......}file://上一个函数的重载......};(6)可以节省空间,避免不必要的内存分配。例如:#definePI3.14159file://常量宏constdoulbePi="3".14159;file://此时并未将Pi放入ROM中......doublei="Pi";file://此时为Pi分配内存,以后不再分配!doubleI="PI";file://编译期间进行宏替换,分配内存doublej="Pi";file://没有内存分配doubleJ="PI";file:
4、//再进行宏替换,又一次分配内存!const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝。(7)提高了效率。编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。3、如何使用const?(1)修饰一般常量 一般常量是指简单类型的常量。这种常量在定义时,修饰符const可以用在类型说明符前,也可
5、以用在类型说明符后。例如:intconstx="2"; 或 constintx="2";(2)修饰常数组 定义或说明一个常数组可采用如下格式: intconsta[5]={1,2,3,4,5}; constinta[5]={1,2,3,4,5};(3)修饰常对象 常对象是指对象常量,定义格式如下:classA; constAa;Aconsta; 定义常对象时,同样要进行初始化,并且该对象不能再被更新,修饰符const可以放在类名后面,也可以放在类名前面。 (4)修饰常指针constint*A;file://const修饰指向的
6、对象,A可变,A指向的对象不可变intconst*A; file://const修饰指向的对象,A可变,A指向的对象不可变int*constA; file://const修饰指针A,A不可变,A指向的对象可变constint*constA;file://指针A和A指向的对象都不可变(5)修饰常引用 使用const修饰符也可以说明引用,被说明的引用为常引用,该引用所引用的对象不能被更新。其定义格式如下: constdouble&v; (6)修饰函数的常参数const修饰符也可以修饰函数的传递参数,格式如下:voidFun(constint
7、Var);告诉编译器Var在函数体中的无法改变,从而防止了使用者的一些无意的或错误的修改。(7)修饰函数的返回值:const修饰符也可以修饰函数的返回值,是返回值不可被改变,格式如下:constintFun1();constMyClassFun2();(8)修饰类的成员函数:const修饰符也可以修饰类的成员函数,格式如下:classClassName{public: intFun()const; .....};这样,在调用函数Fun时就不能修改类里面的数据(9)在另一连接文件中引用const常量externconstinti;file
8、://正确的引用externconstintj="10";file://错误!常量不可以被再次赋值另外,还要注意,常量必须初始化!例如:constinti="5";4、几点值得讨论的地方:(1
此文档下载收益归作者所有