关于const限定符和const引用的讨论

当我们需要定义一个不允许被修改的变量时,我们要定义如下:

例如:const  int  buf = 1024;

这就使得变量buf被定义成了常量,初始值为1024;任何对buf的修改都会导致编译错误:buf=512;将要报错。

const对象默认为局部变量,一个非const变量如果做了合适的声明就可以在另外的文件中被使用;在全局作用域声明的const变量不能被其他文件访问,通过指定const变量为extern,如: extern const int buf=1024;这样变量extern才能在其他文件中使用;

在全局作用域中,非const变量默认为extern,而const变量需要显式指定它为extern。

关于const引用

const int  a=12;

const  int &b=a;//const引用b指向const变量a是合法的

int &c = a;//非const引用c指向const变量a是非法的

这个非法的原因有必要解释一下:c是非const引用,是可以被修改的,这就造成了通过来修改非const引用c来修改const变量a。

const引用可以初始化为不同类型的对象或初始化为右值:

int i = 12;

const int &r = 12;

const int & r1 = i+r; 

以上是合法的!同样的初始化对于非const引用时非法的!

如:

double a= 12;

const int  & b = a;

若将引用b改为非const则非法!

原因如下:

对于上述代码,编译器会转换成如下编码:

int temp = a;//creat temporary  int  from double

const int  &b = temp;//bind b to that temporary

如b不是const,当b被赋给一个新值时,只会修改temp,不会修改a。所以对于非const变量的上述定义是非法的!

由于const引用时只读的,所以允许const引用绑定到需要临时变量作为媒介来完全绑定过程的值。

总的来说就是:非const引用只能绑定到与该引用同类型的对象;const引用可以绑定到不同但相关的类型的对象或右值。

(详见C++Primer)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值