将**左值引用**用于**一级指针**时,有以下几种用法:

```c++
//方式一:引用一级指针,常规用法
int a = 5;
int * pa = &a;
int * &rpa = pa; //方式二:引用指向常量的一级指针,以下几种为等效表示
int a = 5;
const int * pa = &a;
const int * &rpac = pa; //方式一
int const * &rpac = pa; //方式二 //方式三:引用一级指针的常引用,引用自身为常量
int a = 5;
int * pa = &a;
int * const &crpa = pa; //方式四:引用指向常量的一级指针,且引用自身为常量,以下几种为等效表示
int a = 5;
int * pa = &a;
const int * const &crpac = pa; //方式一
int const * const &crpac = pa; //方式二

Microsoft Visual Studio 中连续多个 const 会被编译器解释成一个,即 const const const const int *&const int *& 等效,除此之外,const int const *&Microsoft Visual Studio 中也与 const int *& 等效,而 int *& constQT minGW 中将会报错,在 Microsoft Visual Studio 中与 int *& 等效。

各类型引用可修改属性如下表所示:

引用类型 修改 *rp 修改 rp
int * &rp 可以 可以
const int * &rp 不可以 可以
int * const &rp 可以 不可以
const int * const &rp 不可以 不可以

若将变量的地址赋予引用(例如 rp=&x),各类型引用可接受的变量地址如下表所示:

引用类型 int变量地址 const int变量地址
int * &rp 不可以 不可以
const int * &rp 不可以 不可以
int * const &rp 声明时可以(将创建临时变量) 不可以
const int * const &rp 声明时可以(将创建临时变量) 声明时可以(将创建临时变量)

若将一级指针变量赋予引用(例如 rp=p),各类型引用可接受的一级指针变量如下表所示。若赋值时等号右边是函数返回的临时指针变量(属于右值),则只有当等号左边为 int * const & 以及 const int * const & 类型时不会报错,此时必会创建临时变量(与 const 左值引用性质一致)。

引用类型 int *变量 const int *变量 int * const变量 const int * const变量
int * &rp 可以 不可以 不可以 不可以
const int * &rp 不可以 可以 不可以 不可以
int * const &rp 声明时可以 不可以 声明时可以 不可以
const int * const &rp 声明时可以(将创建临时变量) 声明时可以 声明时可以(将创建临时变量) 声明时可以

若将引用变量赋予引用(例如 rp=rp2),各类型引用可接受的引用变量如下表所示。比较上下两表可知,左值引用类型变量被初始化完毕后,若要将其赋值给另一引用变量,赋值时的表现与所引用类型的变量相一致。

引用类型 int *&变量 const int *&变量 int * const&变量 const int * const&变量
int * &rp 可以 不可以 不可以 不可以
const int * &rp 不可以 可以 不可以 不可以
int * const &rp 声明时可以 不可以 声明时可以 不可以
const int * const &rp 声明时可以(将创建临时变量) 声明时可以 声明时可以(将创建临时变量) 声明时可以

最新文章

  1. Follow me to learn what is repository pattern
  2. 点击Cell中的按钮时,如何取所在的Cell
  3. C# 实现无焦点窗体(转载)
  4. How to hide an entry in the Add/Remove Programs applet?
  5. ActionBar官方教程(5)ActionBar的分裂模式(底部tab样式),隐藏标题,隐藏图标
  6. linux6.2安装mysql
  7. 得到一个临时的文件名称(使用GetTempFileName API函数)
  8. ZOJ 3795 Grouping 求最长链序列露点拓扑
  9. c++ string 对象操作
  10. CSS active选择器与CSS hover选择器
  11. 将搜狗词库(.scel格式)转化为txt格式
  12. Java基础学习笔记二十五 MySQL
  13. page.isvalid
  14. AttributeError: 'int' object has no attribute 'isdigit'(python下的isdigit函数)
  15. <spark> error:启动spark后查看进程,进程中master和worker进程冲突
  16. 深入理解HTTP协议及原理分析
  17. UWP开发细节记录:判断文件类型
  18. SQL server权限管理和备份实例
  19. jQuery 学习笔记:jQuery 代码结构
  20. Python raw_input和input总结 在版本2和版本3中的区别

热门文章

  1. 『现学现忘』Git后悔药 — 31、reset版本回退命令总结
  2. SQL Server 中的 ACID 属性
  3. Mac平台下git命令自动补全
  4. Linux环境下ProxyChains应用网络代理
  5. Solution -「ABC 217」题解
  6. day02-2
  7. noi-2.2基本算法之递归和自调用函数:放苹果
  8. tokitsukaze and Soldier 来源:牛客网
  9. efcore在Saas系统下多租户零脚本分表分库读写分离解决方案
  10. TFrecord写入与读取