const使用及问题总结
来源:互联网 发布:淘宝网10至20包邮 编辑:程序博客网 时间:2024/06/07 15:41
const使用及问题总结
一、背景
最近在论坛中回答了一个别人提出的关于const的问题,就随着自己的理解答复了,不久就有朋友引用贴子说我说的有问题。于是乎自己思索思索、翻翻书发现自己理解的确实有问题。好记性不如烂键盘,何况记性不好,为了加深理解以及以后查询,今天就好好总结一下。
二、const对象
1、定义const对象
定义一个变量代表一个常数的方法存在一个问题:可能被有意或无意的修改。const限定符提供了一个解决办法,他把一个对象转换成一个常量。const int bufsize = 512;
定义bufsize常量并初始化为512.变量bufsize仍然是一个左值,但是这个左值是不可修改的。因为常量定义后就不能修改,所以定义时必须初始化。注意:非const变量默认为extern,要使const变量能够在其他的文件中访问,必须显示的指定它为extern(定义和声明的地方都要extern)。2、const引用
const引用是指向const对象的引用。const int ival = 1024;const int & refVal = ival;//正确int &ref2 = ival;//错误,将const对象绑定到非const引用可以读取但是不能修改refVal,因此不能通过使用refVal来修改ival。const对象可以初始化为不同类型的对象或者初始化为右值。int & r = 42;//错误,const int & x = 42;//正确同样的初始化对于非const引用却是不合法的。观察将引用绑定到不同类型时所发生的事情,最能理解上述内容:double dval = 3.14;const int & ri = dval;编译器会把这些代码转换成如下形式的编码:int temp = dval;//创建一个临时变量,将double类型转换成int类型const int & ri = temp;//将ri绑定到这个临时变量如果ri不是const,那么可以给ri赋一个新值。这样不会修改dval,而是修改了temp。期望对ri的赋值来修改dval的程序员会发现dval并没有修改。仅允许const引用绑定到需要临时变量作为媒介来完全绑定过程的值,因为const引用是只读的。非const引用只能绑定到与该引用同类型的对象。const引用则可以绑定到不同但相关的类型的对象或绑定到右值。3、指针和const限定符
3.1指向const对象的指针
如果指针指向const对象,则不允许用指针来改变所指的const值。因此就出现了指向const对象的指针。const double *cptr;这里的cptr是一个指向double类型const对象的指针,const限定了cptr指针所指向的对象类型,而非cptr本身。也就是说,cptr本身并不是const。在定义时不需要对它进行初始化,如果需要的话,允许给cptr重新赋值,使它指向另一个const对象。但不能修改其所指对象的值:*cptr = 42;//错误,*cptr是const的不能使用void*保存const对象的地址,必须使用const void*类型的指针保存const对象的地址。可以修改const指针所指向的值,即:给这个指针赋值是合法的,而修改指针所指向的对象的内容是非法的。3.2const指针
除了指向const对象的指针外,c++还提供了const指针----指针本身的值不能修改。int errNumb = 0;int * const curErr = &errNumb;从右向左读:“curErr是指向int类型对象的const指针”。与其它const量一样,const指针的值不能修改,这就意味着不能使currErr指向其它对象,但是可以改变它所指向的对象的值。任何给const指针赋值的行为都会导致编译错误,因此const指针必须在定义时初始化。
4、从const成员函数返回*this
在普通的非const成员函数中,this的类型是一个指向类类型的const指针。可以改变this所指向的值,但不能改变this所保存的地址。在const成员函数中,this的类型是一个指向const类类型对象的const指针。既不能改变this所指向的值,也不能改变this所保存的地址。const成员函数写法:void X::func() <span style="color:#ff0000;">const</span>这时const是写在成员函数后面的。这时的this就既不能改变this所指向的值,也不能改变this所保存的地址。
0 0
- const使用及问题总结
- C++中const的不同使用方法及问题总结
- const使用总结
- const使用总结
- const使用总结
- const 关键字使用总结
- 【待总结】const * int,const int *,const &问题
- C++中const使用总结
- const的使用细节总结
- C++中const使用总结
- C++ const的使用总结
- C++中const使用总结
- 关键字const的使用总结
- C++ 中const 使用总结
- uploadify3.2.1+struts 使用及问题总结
- Linux下FreeTDS使用及问题总结
- Const---【const对象和const成员函数及const成员属性总结】
- const成员函数使用问题
- ActiveX组件开发和使用
- HDU4920 Matrix multiplication (CPU cache对程序的影响)
- Python中的条件选择和循环语句
- rman configure命令
- mysql由浅入深视频-有高可用架构、调优、排错等
- const使用及问题总结
- 匹配一个2个相邻并且相同的字符
- LA 4329 Ping pong乒乓比赛【树状数组】
- 找朋友
- java播放声音
- 功能强大的sscanf函数(2)之正则表达式
- java TIFF转JPG并压缩
- ODR规则
- java rsa加密解密