原文地址:http://c.chinaitlab.com/basic/747981.html

1)在实际的程序中,引用主要被用做函数的形式参数--通常将类对象传递给一个函数.
引用必须初始化. 但是用对象的地址初始化引用是错误的,我们可以定义一个指针引用.
int ival = 1092;
int &re = ival;   //ok
int &re2 = &ival;   //错误
int *pi = &ival;
int *&pi2 = pi;   //ok

(2)一旦引用已经定义,它就不能再指向其他的对象.这就是为什么它要被初始化的原因.

(3)const引用可以用不同类型的对象初始化(只要能从一种类型转换到另一种类型即可),也可以是
不可寻址的值,如文字常量。例如
double dval = 3.14159;
//仅对const引用才是合法的
const int &ir = 1024;
const int &ir2 = dval;
const double &dr = dval + 1.0;
上面,同样的初始化对于非const引用是不合法的,将导致编译错误。原因有些微妙,需要适当做些解释。
引用在内部存放的是一个对象的地址,它是该对象的别名。对于不可寻址的值,如文字常量,以及不同

类型的对象,编译器为了实现引用,必须生成一个临时对象,引用时间上指向该对象,但用户不能访问它。
例如:  double dval = 23;
       const int &ri = dval;
编译器将其转换为:
       int temp = dval;
       const int &ri = temp;

(4)不允许非const引用指向需要临时对象的对象或值
const int ival = 1024;
int *&pi_ref = &ival;    //错误,非const引用是非法的
const int *&pi_ref = &ival;   //错误,pi_ref是一个非常量指针,而指针,而ival不可变
const int * const &pi_ref = &ival;  //正确
//补充
const int *p = &ival;
const int *&pi_ref = p;  //正确

********对于const int *const & pi_ref = &iva; 具体的分析如下:*********

1.不允许非const引用指向需要临时对象的对象或值

int a = 2;
    int & ref1 = a;             // OK.有过渡变量。
    int const & ref2 = 2;   // OK.编译器产生临时变量,直接引用。

2.地址值是不可寻址的值

int * const &ref3 = &a;   // OK;

3.于是,用const对象的地址来初始化一个指向指针的引用

引用和const 引用的区别(转自chinaitlab)相关推荐

  1. C++primer: 引用与 const 引用

    1.什么是引用? 引用就是对象的另外一个名字.在实际程序中,引用主要用作函数的形式参数. 引用是一种复合类型,通过在变量名前面添加"&"符号来定义.复合类型是指用其他类型定 ...

  2. 【C++---const引用】数组进行指针引用传递给函数error: non-const lvalue reference of type ‘int*‘ to an rvalue

    目录 原因 类型转换 手动转换 自动转换 关于临时量 关于常量引用(const的引用) const引用的对象不是不能被修改了吗,这里为什么被修改了? 不是说是const引用吗?为什么又变成了引用所绑定 ...

  3. C++ 笔记(15)— 引用(声明引用、引用作为参数、引用作为函数返回值、const 用于引用)

    引用是变量的别名.也就是说,它是某个已存在变量的另一个名字.一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量. 1. 创建引用 要声明引用,可使用引用运算符 & ,如下面的 ...

  4. C++中引用传递与指针传递区别(进一步整理)

    C++中引用传递与指针传递区别(进一步整理) 博客分类: C/C++ CC++C#J#  从概念上讲.指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变 ...

  5. 《C++ Primer 第五版》第二章(1-4小节)------基本内置类型,初始化和赋值及声明和定义,指针和引用,const和constexpr

    C++ Primer第二章的内容主要介绍了变量和基础类型,包括C++语言定义的基础内置类型.变量的定义及声明.符合类型如指针及引用的介绍和const及常量表达式constexpr的介绍,本次博客也从这 ...

  6. 指针、引用以及const限定符、constexpr限定符

    文章目录 复合类型 引用 概念与使用 引用的定义 注意 指针 概念 声明方式 取地址符 指针值 空指针 利用指针访问对象 赋值和指针 void* 指针 指向指针的指针 指向指针的引用 初始化所有指针 ...

  7. C++ 引用和指针有什么区别?

    引用和指针有什么区别? 本质:引用是别名,指针是地址,具体的: ①从现象上看,指针在运行时可以改变其所指向的值,而引用一旦和某个对象绑定后就不再改变.这句话可以理解为:指针可以被重新赋值以指向另一个不 ...

  8. 引用和指针概念及区别

    一.引用和指针 指针:指针是一个特殊的变量,它里面存储的的数值为内存里的一个地址,通过*访问内存地址所指向的值 引用:引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存 ...

  9. C++ 引用详解(引用的特点,引用与指针的区别,引用的其他使用)

    目录 引用 一.引入 二.C++中较为麻烦的运算符 三.引用的定义 四.引用的特点 五.对比指针与引用 六.引用与指针的区别(重点) 1.语法层面的区别 2.汇编层面的区别 七.引用的其他使用 引用 ...

最新文章

  1. Redis初学:7(Set类型)
  2. 解析Shell编程中的-----“去重“
  3. 哈士奇与阿拉斯加的区别!
  4. 特征值与特征向量(二)
  5. 一、pytorch搭建实战以及sequential的使用
  6. C# 类的派生 输出个人信息
  7. ckeditor 框架分析 几个核心“人物”
  8. ora28500 mysql_Oracle使用 ODBC+DBLINK 访问 Mysql
  9. 决策树 结构_决策树模型是什么?5步了解好看模型图
  10. 手机流量网络私有地址
  11. c++ 等待子线程结束_进程和线程
  12. 博客积分排名进入前4万
  13. 【细胞分割】基于matlab GUI阈值+边缘+形态学+种子点+主动轮廓图像分割【含Matlab源码 1477期】
  14. ASP.NET中Request.ApplicationPath、Request.FilePath、Request.Path、.Request.MapPath、
  15. c语言指针知识点小结,C语言指针知识点总结
  16. 程序员常用英语单词汇总
  17. Java中Math类的随机数公式
  18. 目标检测中的precision,recall,AP,mAP计算详解
  19. 苹果手机电池健康怎么看_MIUI12怎么看电池温度 小米手机电池损耗寿命查看方法...
  20. 智能家居行业发展趋势洞察

热门文章

  1. spring如何解决循环依赖
  2. LeetCode Course Schedule(有向图中是否存在环)
  3. 行为模式之Mediator模式
  4. bom中的event以及一些window的API
  5. rest-framework:频率控制
  6. [Leetcode] Insertion Sort List
  7. Python学习之路--函数
  8. Linux命令备忘录: jobs 显示Linux中的任务列表及任务状态命令
  9. Java异步执行多个HTTP请求的例子(需要apache http类库)
  10. 马士兵java视频学习顺序