Const关键字详解.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Const关键字详解

Const关键字详解?为什么使用const?采用符号常量写出的代码更容易维护;指针常常是边读边移动,而不是边写边移动;许多函数参数是只读不写的。const最常见用途是作为数组的界和switch分情况标号(也可以用枚举符代替),分类如下:? 常变量:??const?类型说明符变量名? 常引用:??const?类型说明符 引用名? 常对象:??类名?const?对象名? 常成员函数:??类名::fun(形参)?const? 常数组:??类型说明符?const?数组名[大小]????? 常指针:??const?类型说明符* 指针名,类型说明符*?const?指针名首先提示的是:在常变量(const?类型说明符变量名)、常引用(const?类型说明符 引用名)、常对象(类名?const?对象名)、?常数组(类型说明符?const?数组名[大小]),?const”?与 “类型说明符”或“类名”(其实类名是一种自定义的类型说明符)?的位置可以互换。如:?????const?int a=5;?与?int?const?a=5;?等同???? 类名?const?对象名?与?const?类名对象名?等同用法1:常量? ??取代了C中的宏定义,声明时必须进行初始化(!c++类中则不然)。const限制了常量的使用方式,并没有描述常量应该如何分配。如果编译器知道了某const的所有使用,它甚至可以不为该const分配空间。最简单的常见情况就是常量的值在编译时已知,而且不需要分配存储。―《C++ Program Language》??? 用const声明的变量虽然增加了分配空间,但是可以保证类型安全。? ? C标准中,const定义的常量是全局的,C++中视声明位置而定。用法2:指针和常量? ? 使用指针时涉及到两个对象:该指针本身和被它所指的对象。将一个指针的声明用const“预先固定”将使那个对象而不是使这个指针成为常量。要将指针本身而不是被指对象声明为常量,必须使用声明运算符*const。? ? 所以出现在 * 之前的const是作为基础类型的一部分:char *constcp; //到char的const指针char const *pc1; //到const char的指针const char *pc2; //到const char的指针(后两个声明是等同的)? ? 从右向左读的记忆方式:cp is a const pointer to char.?故pc不能指向别的字符串,但可以修改其指向的字符串的内容pc2 is a pointer to const char.?故*pc2的内容不可以改变,但pc2可以指向别的字符串且注意:允许把非const对象的地址赋给指向const对象的指针,不允许把一个const对象的地址赋给一个普通的、非const对象的指针。用法3:const修饰函数传入参数? ? 将函数传入参数声明为const,以指明使用这种参数仅仅是为了效率的原因,而不是想让调用函数能够修改对象的值。同理,将指针参数声明为const,函数将不修改由这个参数所指的对象。? ? 通常修饰指针参数和引用参数:void Fun( const A *in); //修饰指针型传入参数void Fun(const A in); //修饰引用型传入参数用法4:修饰函数返回值? ? 可以阻止用户修改返回值。返回值也要相应的付给一个常量或常指针。用法5:const修饰成员函数(c++特性)const对象只能访问const成员函数,而非const对象可以访问任意的成员函数,包括const成员函数;const对象的成员是不能修改的,而通过指针维护的对象确实可以修改的;const成员函数不可以修改对象的数据,不管对象是否具有const性质。编译时以是否修改成员数据为依据进行检查。具体展开来讲:(一). 常量与指针?常量与指针放在一起很容易让人迷糊。对于常量指针和指针常量也不是所有的学习C/C++的人都能说清除。例如:??? constint *m1 = new int(10);??? int* const m2 = new int(20);在上面的两个表达式中,最容易让人迷惑的是const到底是修饰指针还是指针指向的内存区域?其实,只要知道:const只对它左边的东西起作用,唯一的例外就是const本身就是最左边的修饰符,那么它才会对右边的东西起作用。根据这个规则来判断,m1应该是常量指针(即,不能通过m1来修改它所指向的内容。);而m2应该是指针常量(即,不能让m2指向其他的内存模块)。由此可见:?? 1.?对于常量指针,不能通过该指针来改变所指的内容。即,下面的操作是错误的:????? inti = 10;????? constint *pi = i;?????

文档评论(0)

2232文档 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档