const reference和nonconst reference的区别

原创 2008年10月03日 21:44:00
普通的reference必须用与该引用同类型的对象来初始化。例如:
  1. int ival = 1024;
  2. int &refVal = ival;   // ok: refval refers to ival
  3. int &refVal2;         // error: 引用必须初始化
  4. int &refVal3 = 10;    // error: 必须用对象进行初始化,而不能是字面值常量(literal constant)
  5.  
  6. const int ival2 = 256;
  7. int &refVal4 = ival2; // error: 注意const int和int是不同类型
  8.  
  9. register int ival3(512);
  10. int &refVal5 = ival3; // ok: 不管是寄存器变量还是自动变量
而const reference的限制则没那么多。例如:
  1. const int ival = 1024;
  2. const int &refVal1 = ival;  // ok: 类型匹配
  3. const int &refVal2 = 1024;  // ok: 1024称为字面值常量(literal constant),也是const int类型,匹配

  4. const int &refVal3 = ival + 256; // ok: 可以用表达式
  5. const int &refVal4 = fnc(); // ok: 可以是函数返回值

  6. double dval = 3.14;
  7. const int &ri = dval;    // ok: 可以是不同类型
实际上09行在编译时编译器会把它转化为形如
  1. const int temp = dval;
  2. const int &ri = temp;
注意到隐式转换从double型转为const int型,编译时会出现一个warning

参考:
C++ Primer中文版(第4版)

c++之const,reference(引用),

一,尤其是在循环的时候,不要用魔数(意义没在上下文表示)。这个时候要用到魔数常量的时候,可以把该常量初始化为一个对象(变量代表一个常量): int  buf = 22;提高可读性。 二,const对象...
  • sakulamomogo
  • sakulamomogo
  • 2015年08月07日 21:41
  • 453

gcc提示库里文件未包含( “undefined reference to”)

今天遇到了一个诡异的问题:编译通过,链接时候出错,提示: ./lib4//ccode/lib/libulccode.a(ul_ccode.o): In function `load_bj': /ho...
  • followingturing
  • followingturing
  • 2012年07月28日 13:18
  • 2189

尽量用pass-by-reference-to-const(const引用)替换pass-by-value(传值)

1、尽量以pass-by-reference-to-const替换pass-by-value,前者通常毕竟高校,并可避免切割问题(slicing problem)。 2、以上规则并不适...
  • zyq522376829
  • zyq522376829
  • 2015年09月01日 20:40
  • 787

invalid initialization of non-const reference of type与discards qualifiers

参数传递          函数参数的传递是初始化语义:用调用者的实参去初始化函数的形参,如果参数是对象,需要调用该类的拷贝构造函数,如果没有显式定义的拷贝构造函数,则执行默认的按成员拷贝   ...
  • turkeyzhou
  • turkeyzhou
  • 2013年06月24日 15:07
  • 4238

c++ pointer vs. reference

from:http://blog.csdn.net/FireCoder/article/details/5429199 Reference 1. If you are fa...
  • navyhu
  • navyhu
  • 2015年01月06日 22:14
  • 1366

const reference and reference to const

reference(引用)是一个object的alias别名,本身不是一个object,故严格说没有const reference。当你称呼const reference 的时候前提是你要明白那是对r...
  • MacanS
  • MacanS
  • 2016年11月10日 14:25
  • 146

C++中指针(pointer)和引用(reference)的区别和联系

估计很多人在编写C++程序都或多或少的会用到pointer 和 reference这两种东西,但是他们两者到底有什么样的区别和联系呢,相信大多数人是不太了解的,今天我就两者的区别和联系从实际程序的角度...
  • AndyZhange
  • AndyZhange
  • 2005年04月04日 18:57
  • 4085

Web Reference和Service Reference的区别

今天因为项目需要使用服务引用,就按之前的经验添加上了,步骤如下: 项目根目录——引用——右键——添加服务引用——高级——添加Web引用——输入接口的URL地址——回车(下方出现的就是接口的定义的方法...
  • yiyelanxin
  • yiyelanxin
  • 2017年07月26日 10:09
  • 682

《Effective C++》:尽量用const和inline取代#define(1)

Shifting from C to C++!!       学习C++也有一段时间了,写此笔记,主要是一是激励监督自己不间断的学习,而是加深知识的理解与记忆!       C++是一个难学易用的语言...
  • gogoky
  • gogoky
  • 2016年05月19日 11:15
  • 498

error: undefined reference to 'android::AString::~AString()'

/home/zhangbin/android/android-ndk-r9b/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/....
  • commshare
  • commshare
  • 2014年10月22日 17:22
  • 1289
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:const reference和nonconst reference的区别
举报原因:
原因补充:

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