我是靠谱客的博主 疯狂棒棒糖,最近开发中收集的这篇文章主要介绍关于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)

最后

以上就是疯狂棒棒糖为你收集整理的关于const限定符和const引用的讨论的全部内容,希望文章能够帮你解决关于const限定符和const引用的讨论所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部