关于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)

版权声明:本文为博主原创文章,未经博主允许不得转载。

关于C++的右值、const引用、右值引用、const成员函数及相关扩展

函数式编程采用抽象的函数模型,将计算视为用函数对“值”作处理。“纯粹”的函数式编程避免涉及内存模型,禁止更改值及保存状态变量(这被称作“副作用”:side-effect)。一些语言如Haskell仍遵...
  • hk201406
  • hk201406
  • 2014年06月27日 15:39
  • 1013

引用和const引用

续前面的http://blog.csdn.net/hjj414/article/details/17390593
  • u013184096
  • u013184096
  • 2014年06月27日 16:05
  • 1491

C++中const限定符的几种常见用法

const对象 将一个对象定义为不可更改的对象,称为const对象。 例:const int a = 512 ; 注解:因为const对象在定义后就不能修改,所以定义时必须初始化。 const引用 ...
  • Jocodeoe
  • Jocodeoe
  • 2012年09月23日 11:58
  • 3497

const引用的用途

const引用的用途 const引用也是应用在函数调用的传参方面。假设我们希望能确保被调函数不会改变主调函数数据的值,那么使用const引用传参既确保了被调函数不会改变主调函数的数据,又不会像非...
  • chenshuzhenteacher
  • chenshuzhenteacher
  • 2012年10月23日 09:34
  • 4039

c++之const限定符

有时候我们希望定义这样一个变量,它的值不能被改变。为了满足这个要求,可以用const对变量的类型加以限定。 const限定符 (1):因为使用const限定符声明的变量就是常量,是不可以被修改...
  • qq_35644234
  • qq_35644234
  • 2016年08月25日 16:47
  • 548

const限定符的用法总结

const限定符的用法总结
  • u010378559
  • u010378559
  • 2015年11月21日 13:37
  • 829

关于const常量、const指针以及const引用

这篇博客从头到尾的讲一下关于const的一些问题。 1.const常量 与变量不同,有const修饰的量是常量,常量的值不可改变,在定义的时候必须初始化,使用未初始化的常量是错误的。以前还经常弄不清楚...
  • Mysunshinetbg
  • Mysunshinetbg
  • 2015年09月10日 17:12
  • 5004

函数返回的临时对象为const类型,const引用

#include #include     using namespace std; class A { public: A(){ m_Int = 10; } publi...
  • damotiansheng
  • damotiansheng
  • 2014年02月17日 15:57
  • 2688

const限定符的讨论

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

C++:const和引用

上面一篇博客我们已经介绍了基本的const,对于这篇博客,我先说下引用是什么 引用说白了就是为对象另外起了一个名字,引用类型引用另一种类型。 定义方式: 将声明符写成&d的形式来定义引用类型其中d是声...
  • lishuzhai
  • lishuzhai
  • 2016年01月28日 18:24
  • 2244
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于const限定符和const引用的讨论
举报原因:
原因补充:

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