引用变量在创建的时候就必须初始化。无法创建一个未被初始化的引用。

#include <iostream>
using namespace std;
int main()
{
int x=10;
int y=20;
int &r1;
}

编译结果:



假设引用未被初始化。编译将报错。

改动引用:

引用总是指向初始化的那个变量,也就是说,引用一旦被创建并初始化之后就无法改变。这一规则有点让人迷惑。

假设声明了一个引用的同一时候使用一个变量赋值了,那么这个引用就会一直指向这个变量。

在此后使用变量对引用赋值,被引用变量的值变为被赋值变量的值。而引用不会因此更新从而指向这个变量。

样例:

#include <iostream>
using namespace std;
int main()
{
int x=10;
int y=20;
cout<<"&x="<<&x<<endl
<<"&y="<<&y<<endl;
//初始化引用,r1指向x
int &r1=x;
cout<<"&r1="<<&r1<<",r1="<<r1<<endl;
//这里仅仅是改变了r1的值,并没有改变r1指向的引用
r1=y;
cout<<"&r1="<<&r1<<",r1="<<r1<<endl;
//更改引用也会更改原来的值
r1=30;
cout<<"&r1="<<&r1<<",r1="<<r1<<endl;
cout<<"finally &x="<<&x<<",x="<<x<<endl; cout<<r1<<endl;
cin.get(); }

执行结果:

注意:对引用取地址的结果和对被引用的变量取地址的结果是同样的!

能够看出,改变的仅仅是引用变量x的值,并没有改变引用的指向.

也许你试图想通过在给引用赋值的时候取y的地址,绕过这一限制,r1=&y;

可是这样编译会报错

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXE4NDQzNTIxNTU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

r1的实质是一个int型的引用。而&y则是一个int的指针。两者不能转换。

无法创建未命名值(比如一个整型值11。实质上这就是一个右值)的引用,除非这是一个const值。

#include <iostream>
using namespace std;
int main()
{
int &r1=11;
}

编译结果:(rvalue是右值的意思,lvalue是左值,rightvalue,leftvalue)

这句语句意味着能够改变11的值,而这样做是没有意义的。

可是假设是const的引用。则能够执行。

C++学习笔记29,引用变量(1)的更多相关文章

  1. 学习笔记:Javascript 变量 包装对象

    学习笔记:Javascript 变量 包装对象 如下代码,可以输出字符的长度. var str = "Tony"; str.length; 这时再试试以下代码,返回是 undefi ...

  2. Go语言学习笔记二: 变量

    Go语言学习笔记二: 变量 今天又学了一招如何查看go的版本的命令:go version.另外上一个笔记中的代码还可以使用go run hello.go来运行,只是这种方式不会生成exe文件. 定义变 ...

  3. js学习笔记1(变量、作用域、内存)

    写在前面,舍弃叽叽歪歪,只做学习笔记,认真踏实. 学习书籍:javascript高级程序设计3版. 章节4.1 基本类型和引用类型 1.基本类型在内存中占据固定大小的空间,所以保存在栈内存中. 2.从 ...

  4. 【Unity 3D】学习笔记29:游戏的例子——简单的小制作地图

    无论学习.只看不练是坏科学. 因此,要总结回想这怎么生产MMROPG小地图的游戏.于MMROPG游戏类,在游戏世界中行走时导致各地,通常在屏幕的右上角,将有一个区域,以显示当前的游戏场景微缩.在游戏世 ...

  5. java学习笔记----数据类型,变量,常量

    一.数据类型 1.基本类型(8种,又称内置数据类型).6种数字类型(byte,short,int,long,float,double),一种字符型(char),一种布尔类型(boolean). byt ...

  6. (C/C++学习笔记) 十三. 引用

    十三. 引用 ● 基本概念 引用: 就相当于为变量起了一个别名(alias), △与指针不同的是它不是一个数据类型 通过引用我们可以间接访问变量,指针也能间接访问变量,但引用在使用上相对指针更安全. ...

  7. C++ 学习笔记之 引用

    一.定义: 引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样. 二.用法: 基本用法 例如: int & a = b; 引用作为函数返回值 先看一个例子: #inclu ...

  8. [原创]java WEB学习笔记29:Cookie Demo 之自动登录

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  9. SAS学习笔记41 宏变量存储及间接引用

    Macro Variables存储在“Symbol Table”中.它是由Macro Processor在SAS启动时自动创建并维护的.SAS提供了一张视图来供我们查看Symbol Table中的内容 ...

随机推荐

  1. C#递归树

    protected void Page_Load(object sender, EventArgs e) { bindtree(PopId); } private void bindtree() { ...

  2. CentOS 7 下yum安装xtrabackup备份工具

    第一步:安装xtrabackup的数据库 yum install https://www.percona.com/redir/downloads/percona-release/redhat/late ...

  3. COB (Chip On Board) 製程介紹/簡介/注意事項 II

    銀膠 (Silver glue) 如果晶圓有接地或是散熱需求時,一般都會採用[銀膠],如果沒有的話則會採用[厭氧膠].[厭氧膠]顧名思義就是阻隔它與空氣接觸後就會自然固化,不需要高溫烘烤.使用銀膠則需 ...

  4. 修改spinner选中以后显示的字体颜色

    原来spinner选中以后显示的view  还是textview  ,这样就是可以设置它的字体颜色了 sp.setOnItemSelectedListener(new OnItemSelectedLi ...

  5. CodeForces 135C C. Zero-One

    题目 题意: 一个01串,AB两个人轮流删去一个字符,直到只剩两个,A先手.最后剩的两位组成一个二进制数,A要使其最小,B要使其最大. 有一些部分不知道原来是什么,用?表示,求所有的可能里,最后剩下的 ...

  6. js获取手机重力感应api

    <html> <head> <title>DeviceOrientationEvent</title> <meta charset="U ...

  7. 截取字符串一之slice

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 高德地图API

    这周计划: 周一 早上 (高德地图API) 中午写(IFE PART ONE) 下午(高德地图API) 下班(IFE PART ONE)

  9. 弹飞DZY(思维,打表,还没过全,先放着)

    弹飞DZYDescription某天,机智的ZZC发明了一种超级弹力装置,为了在他的朋友DZY面前显摆,他邀请DZY一起玩个游戏.游戏一开始,ZZC在地上沿着一条直线摆上n个装置,每个装置设定初始弹力 ...

  10. Rabbit and Grass(杭电1849)(尼姆博弈)

    Rabbit and Grass Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...