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

#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. Python核心编程笔记---- input 与raw_input

    1.raw_input:的返回值是一个string 对象. 2.input:相当于eval(raw_input()),计算出来是什么类型就是什么类型. ------------------------ ...

  2. android中获取root权限的方法以及原理(转)

    一. 概述 本文介绍了android中获取root权限的方法以及原理,让大家对android 玩家中常说的“越狱”有一个更深层次的认识. 二. Root 的介绍 1. Root 的目的 可以让我们拥有 ...

  3. 将String类型的数字字符转换成int

    java.lang.Integer.parseInt(String) public static int parseInt(String s) throws NumberFormatException ...

  4. 一些User-Agent

    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)", "Mozilla/4.0 (compatible; MSIE ...

  5. Day3_字符串操作与正则表达式

    本节课的主要内容有:字符串的格式化.连接与分割.比较.匹配和替换.使用正则表达式 字符串的格式化: 去除空格:trim() 使用html格式化:nl2br()  替换‘\n’为‘<br /> ...

  6. js预处理图片个人见解1

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

  7. Redis的持久化选项

    Redis提供了两种不同的持久化方法来将数据存储到硬盘里面.一种方法叫快照(snapshotting),它可以将存在于某一时刻的所有数据都写入硬盘里面.另一种方法叫只追加文件(append-only ...

  8. python手记(9)

    本博客所有内容是原创,未经书面许可,严禁任何形式的转 http://blog.csdn.net/u010255642 tab #!/usr/bin/env python # example noteb ...

  9. go-vim配置

    一.环境准备: 系统环境说明: [root@docker golang]# cat /etc/redhat-release CentOS Linux release (Core) [root@dock ...

  10. C++中常用特殊符号简介(& , * , : , :: , ->)

    1."&"一般表示:引用,按位与,取地址. 如: class Complex { public: Complex operator+(Complex &c2) .. ...