


C/C++培训
达内IT学院
400-996-5531

const这个概念是非常重要的。首先,const变量也是一个变量,不改变变量值的操作它也都支持。
对于不改变其值的变量,尽量使用const
如果利用一个对象去初始化另外一个对象,则他们是不是const都无关紧要,因为拷贝一个对象不会改变其内容。
在const变量定义的前面加上extern关键字可以实现变量在文件之间的共享,和普通的变量一样。
const引用
const引用是不允许改变其引用内容的值的,这一点和const指针一致,但是因为引用本身也不会改变,所以它也可以看做是一个常量。
不允许把一个const值赋值给一个非const引用,因为这样默认可以改变其内容,这是不允许的。
初始化const引用时允许用任意表达式作为初始值,只要这个表达式的结果能转换成引用的类型即可,比如非const的对象、字面值或者一般的表达式。
也就是说,给非const引用赋值const值不可以,但是给const引用赋值非const值是可以的,const引用可以,const值不行。
指向常量的指针和常量指针——const指针
指向常量的指针不允许改变其指向对象的内容,也就是不能通过*p来进行赋值操作。
指向常量的指针也可以指向一个非常量对象,只不过不能通过指针来改变。
在这里,指针本身并不是一个常量,是可以被改变的,也就是说指针本来是指向a的,也可以改变它让它指向b。定义方式是const int *p
const指针——指针本身是一个常量
可以让指针一直指向一个对象,这就是常量指针,定义方式是 int *const p,从右往左,首先是一个常量,然后是一个指针。
在这种情况下,指针指向的对象的值是可以通过指针来修改的,不过指针本身的指向不能改变了。
常量指针不能指向一个常量,因为默认是可以修改的,想要指向常量得用指向常量的常量指针,const int *const p
顶层const和底层const
顶层const指的是对象这个本身是一个const,而底层const的范围就缩小到了指针和引用这两部分,代表着它所指向或者引用的对象是一个常量。
指针可以是顶层const,也可以是底层const,指向常量的常量指针。
constexpr变量——声明为constexpr的变量一定是一个常量,并且必须用常量表达式初始化。如果是一个constexpr的指针,那么只要求指针是常量就可以,对指针所指的对象没有要求。
填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
Copyright © 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有