概述
当我们需要定义一个不允许被修改的变量时,我们要定义如下:
例如: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引用的讨论所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复