关闭

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

标签: c++cons变量引用
478人阅读 评论(0) 收藏 举报
分类:

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

例如: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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:35192次
    • 积分:732
    • 等级:
    • 排名:千里之外
    • 原创:31篇
    • 转载:55篇
    • 译文:0篇
    • 评论:4条
    博主
    北京工业大学在读硕士,专攻自然语言处理,深度学习! 新浪微博:IT_李宁
    最新评论