下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C++中const总结[转]--笔录C++中const总结[转]阅读全文(355)|回复(1)|引用通知(0)|编写一、对于基本申明1.constintr=100;//标准const变量申明加初始化,由于默认内部连接因此一定被初始化,其作用域为此文件,编译器经过种类检查后直接用100在编译时替代。2.extendconstintr=100;//将const改为外面连接,作用于扩大至全局,编译时会分配内存,而且可以不进行初始化,不过作为申明,编译器以为在程序其余地方进行了定义。3.constintr[]={1,2,3,4};structS{inta,b;};constSs[]={(1,2),(3.4)};//以上两种都是常量会集,编译器会为其分配内存,因此不可以在编译时期使用此中的值,比方:inttemp[r[2]];这样的编译器会报告不可以找到常量表达式二、对于指针1.constint*r=&x;//申明r为一个指向常量的x的指针,r指向的对象不可以被更正,但他可以指向任何地址的常量。2.intconst*r=&x;//与用法1完整等价,没有任何差别。3.int*constr=&x;//申明r为一个常量指针,他指向x,r这个指针的指向不可以被更正,但他指向的地址的内容可以更正。4.constint*constr=&x;//综合1、3用法,r是一个指向常量的常量型指针。三、对于种类检查可以把一个非const对象赋给一个指向const的指针,由于有时候我们不想从这个指针来更正其对象的值;但是不行以把一个const对象赋值给一个非const指针,由于这样可能会通过这个指针改变指向对象的值,但也存在使这类操作经过的合法化写法,使用种类强迫变换可以经过指针改变const对象:constintr=100;int*ptr=const_cast(&r);//C++标准,C语言使用:int*ptr=(int*)&r;四、对于字符数组如char*name=“china”;这样的语句,在编译时是可以经过的,但是”china”是常量字符数组,任何想更正他的操作也能经过编译但会惹起运转时错误,假如我们想更正字符数组的话就要使用charname[]=“china”;这类形式。五、对于函数1.voidFuction1(constintr);//此处为参数传达const值,意义是变量初值不可以被函数改变2.constintFuction1(int);//此处返回const值,意思指返回的原函数里的变量的初值不可以被更正,但是函数按值返回的这个变量被制成副本,能不可以被更正就没有了意义,它可以被赋给任何的const或非const种类变量,完整不需要加上这个const要点字。但这只对于内部种类而言(由于内部种类返回的一定是一个值,而不会返回一个变量,不会作为左值使用),对于用户自定义种类,返回值是常量是特别重要的,见下边条款3。3.ClassCX;//内部有构造函数,申明如CX(intr=0)CXFuction1( ){returnCX( );}constCXFuction2( ){returnCX( );}若有上边的自定义类CX,和函数Fuction1( )和Fuction2( ),我们进行以下操作时:Fuction1( )=CX(1);//没有问题,可以作为左值调用Fuction2( )=CX(1);//编译错误,const返回值严禁作为左值调用。由于左值把返回值作为变量会更正其返回值,const申明严禁这类更正。4.函数中指针的const传达和返回:intF1(constchar*pstr);//作为传达的时候使用const修饰可以保证不会经过这个指针来更正传达参数的初值,这里在函数内部任何更正*pstr的妄图都会惹起编译错误。constchar*F2( );//意义是函数返回的指针指向的对象是一个const对象,它一定赋给一个相同是指向
const对象的指针。constchar*constF3( );//比上边多了一个
const,这个
const的意义不过在他被用作左值时有效,它表示了这个指针除了指向const对象外,它自己也不可以被更正,因此就不可以看作左值来办理。5.函数中引用的const传达:voidF1(constX&px);//这样的一个const引用传达和最一般的函数按值传达的成效是一模一样的,他严禁对引用的对象的全部更正,独一不一样的是按值传达会先建立一个类对象的副本,而后传达过去,而它直接传达地址,因此这类传达比按值传达更有效。别的只有引用的const传达可以传达一个暂时对象,由于暂时对象都是const属性,且是不行见的,他短时间存在一个局部域中,因此不可以使用指针,只有引用的const传达能够捕获到这个家伙。六、对于类1.第一,对于const的成员变量,只好在构造函数里使用初始化成员列表来初始化,试图在构造函数体内进行初始化const成员变量会惹起编译错误。初始化成员列表形如:2.X::X(intir):r(ir){}//假设r是类X的const成员变量2.const成员函数。提到这个看法第一要谈到const对象,正象内置种类可以定义const对象相同(constintr=10;),用户自定义种类也可以定义const对象(constXpx(10);),编译器要保证这个对象在其生命周期内不行以被改变。假如你定义了这样的一个const对象,那么对于这个对象的全部非const成员函数的调用,编译器为了保证对象的const特征,都会严禁并在编译时期报错。因此假如你想让你的成员函数可以在const对象长进行操作的话,就要把这个函数申明为const成员函数。若是f( )是类中的成员函数的话,它的申明形如:intf( )const;//const放在函数的最后,编译器会对这个函数进行检查,在这个函数中的任何试图改变为员变量和调用非const成员函数的操作都被视为非法注意:类的构造和析构函数都不可以是const函数。3.建立了一个const成员函数,但仍旧想用这个函数改变对象内部的数据。这样的一个要求也会常常遇到,特别是在一个苛刻的面试考官那边。第一我们要弄清楚考官的要求,由于有两种方法可以实现,假如这位考官要求不改变本来类的任何东西,只让你从当前这个const成员函数下手,那么你只有使用前面提到的种类强迫变换方法。实比方下://若是有一个叫做X的类,它有一个int成员变量r,我们需要经过一个const成员函数f( )来对这个r进行++r操作,代码以下voidX::f( )const{(c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度园林绿化服务合同详细条款
- 二零二四年体育赛事赞助合同:赞助金额、品牌露出与权益回报
- 2024年度环保设备采购与租赁合同
- 2024年度超市商品防伪技术合同
- 2024年度云计算服务特定合同
- 2024年度东莞市设计服务租赁合同
- 2024年度产品检验与检测合同:玻璃钢、GRG、FRP
- 2024年度二手房买卖合同标的物评估报告
- 2024年度跨境电商合作与服务合同
- 2024年度办公软件定制开发与购买合同
- GB/T 5237.1-2017铝合金建筑型材第1部分:基材
- GB/T 26121-2010可曲挠橡胶接头
- GB/T 25497-2010吸气剂气体吸放性能测试方法
- 城市绿地系统规划 第9章 工业绿地规划
- 高中思想政治课选择性必修2《法律与生活》教材使用建议与典型课例研究课件
- 数学的发展历史课件
- 外来人员入厂安全告知书
- DB22-T 5036-2020建设工程项目招标投标活动程序标准-(高清正版)
- 工程监理聘用合同(一)
- 写作指导:顺叙倒叙插叙课件
- 小学综合实践活动《息技术-4网络信息辨真伪》优质课件-26
评论
0/150
提交评论