欢迎使用CSDN-markdown编辑器

const 限定符
关键字const可以用来修饰一个变量使其值不能被改变

const int bufsize = 512; //不可对bufszie进行赋值等尝试修改bufsize值的操作

因为被const修饰的值不能被改动,所以必须在声明的同时初始化

除了不能参与涉及修改常量内容的操作,常量与非常量所能参加的操作大多相同;

默认状态下,const对象仅在文件内有效,如果需要让其在别的文件中能访问,则需要用extern关键字修饰

extern const double pi =3.14156; //(声明并)定义
extern const double pi //访问(声明)

对 const 的引用 (const typename &): 引用不是对象不能用const修饰,引用本身绑定之后地址变不可更改,const 引用指的是引用指向的对象不能更改。(底层 const)
指向 const 的指针 (const typename *): 指针指向的对象不能更改。(底层 const)
const 的指针 (typename * const): 指针本身不能更改其指向的地址。(顶层 const)

对 const 的引用:(const typename &)

对于const对象必须要用对const的引用,因为如果采用普通引用会造成能通过引用来修改const对象的结果。反之,对const的引用并没有限定必须引用const对象,但是如果通过对const的引用来绑定一个非const对象,那将无法通过该引用去改变绑定对象的值,当然对非const对象本身进行修改仍是可行的。

通常情况下,引用的类型必须与其引用对象的类型一致,因为如果不一致,编译器将会产生一个temp对象先对引用对象进行转型,然后再将引用与temp对象绑定。这一操作将会使引用失去与指定对象绑定进行操作的意义。如果是对const的引用则允许进行这种操作,其效果相当于定义一个未命名变量然后用对const 的引用与它绑定,对const引用是其与外部的唯一接口,所以这个未命名变量也无法进行修改。

指向 const 的指针(const typename *)

与引用相同,对于const对象必须要用指向const的指针,无法通过指向const 的指针修改对象的值,同样的,指向const的指针并不要求一定要指向const对象,如果指向普通对象,该对象可以通过别的途径改变自己的值。

const 的指针(typename * const)

指针也是一种对象,因此指针也可以设置为const对象。与其他常量一样,指针常量在声明时必须初始化。指针常量指向的地址不可改变, 其余属性与普通指针都相同。

顶层const: 任意对象本身是常量。
底层const:一般与复合类型的基本类型部分有关,复合类型的基本类型部分是常量。(指向或者引用的对象为常量)

顶层和底层在拷贝时有着明显区别,顶层对象在拷贝给别的对象时,别的对象是否顶层const并无影响,然而底层const拷贝时需要拷贝对象有着同样的底层const,否则可能能通过该对象修改const的值,这是不允许的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值