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

原创 2013年12月02日 10:15:30

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

例如: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限定符的讨论

因为常量在定义后就不能被修改,所以定义时必须初始化: 这几种指针却是很容易弄混淆。下面我谈谈我的看法。欢迎指正。  指向常量的指针。  按照字面意思,这个指针应该指向常量...
  • dayuqi
  • dayuqi
  • 2012年09月09日 21:59
  • 382

关于两种复合类型--引用和指针以及const常量限定符的一些总结

引用(不能作为对象): 起一个另外的名字而已,好比如*文华今天叫小华,明天别人叫他小文,他还是他。 注意上述中的引用应该是指“小文”这个名字符号,而不是指小文其人,故引用不是对象!故不能定义引用的...

C++查缺补漏之const限定符及引用

C++查缺补漏之const限定符及引用

const 限定符 extern 对常量的引用 指向常量的指针 常量指针

main.cpp extern const int x = 10;//必须加extern int main(){ return 0; }fun.cppextern const int x; void ...

C++ Primer学习笔记5 变量和基本类型(const限定符、引用、typedef名字、枚举)

1、const限定符 定义一个变量代表某一个常数存在严重的问题,变量可以被修改,如果用const限定符可以解决此问题,把一个对象转换为常量。 const  int  bufSize = 512; ...

稻草人的程序之路--函数参数中非引用,引用和const限定符的使用.

关于函数的参数传递,我们在C/C++中或多或少有些认识和了解。但对很多刚接触程序的新人来说,都没有真正的搞懂形参有哪些类型,又分别扮演什么用的角色,这里我简单的做一个慨括。       ...

const 限定符的使用

  • 2015年04月14日 20:05
  • 25KB
  • 下载

C语言中const、volatile、restrict等类型限定符的区别

auto、register、static、extern是属于存储类修饰符。在声明时,存储类修饰符最多只能使用一个,而且无法用在typeof声明中。 而类型限定符是指const、volatile、...

C++中const限定符小结

c++中新增加了一种限定符:const限定符。它的作用是是得它限定的对象(或者内置类型的变量)不能改变。 举一个简单的例子,当我们定义const int bufSize = 512时,变量bufSi...

const限定符的用法总结

const限定符的用法总结
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于const限定符和const引用的讨论
举报原因:
原因补充:

(最多只允许输入30个字)