C++学习笔记29,引用变量(1)
引用变量在创建的时候就必须初始化。无法创建一个未被初始化的引用。
#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)的更多相关文章
- 学习笔记:Javascript 变量 包装对象
学习笔记:Javascript 变量 包装对象 如下代码,可以输出字符的长度. var str = "Tony"; str.length; 这时再试试以下代码,返回是 undefi ...
- Go语言学习笔记二: 变量
Go语言学习笔记二: 变量 今天又学了一招如何查看go的版本的命令:go version.另外上一个笔记中的代码还可以使用go run hello.go来运行,只是这种方式不会生成exe文件. 定义变 ...
- js学习笔记1(变量、作用域、内存)
写在前面,舍弃叽叽歪歪,只做学习笔记,认真踏实. 学习书籍:javascript高级程序设计3版. 章节4.1 基本类型和引用类型 1.基本类型在内存中占据固定大小的空间,所以保存在栈内存中. 2.从 ...
- 【Unity 3D】学习笔记29:游戏的例子——简单的小制作地图
无论学习.只看不练是坏科学. 因此,要总结回想这怎么生产MMROPG小地图的游戏.于MMROPG游戏类,在游戏世界中行走时导致各地,通常在屏幕的右上角,将有一个区域,以显示当前的游戏场景微缩.在游戏世 ...
- java学习笔记----数据类型,变量,常量
一.数据类型 1.基本类型(8种,又称内置数据类型).6种数字类型(byte,short,int,long,float,double),一种字符型(char),一种布尔类型(boolean). byt ...
- (C/C++学习笔记) 十三. 引用
十三. 引用 ● 基本概念 引用: 就相当于为变量起了一个别名(alias), △与指针不同的是它不是一个数据类型 通过引用我们可以间接访问变量,指针也能间接访问变量,但引用在使用上相对指针更安全. ...
- C++ 学习笔记之 引用
一.定义: 引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样. 二.用法: 基本用法 例如: int & a = b; 引用作为函数返回值 先看一个例子: #inclu ...
- [原创]java WEB学习笔记29:Cookie Demo 之自动登录
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- SAS学习笔记41 宏变量存储及间接引用
Macro Variables存储在“Symbol Table”中.它是由Macro Processor在SAS启动时自动创建并维护的.SAS提供了一张视图来供我们查看Symbol Table中的内容 ...
随机推荐
- WebService之Axis2
写在前面 本文只说Axis2的用法. 1.下载与部署 需要下载两个文件: 下载地址:http://mirrors.cnnic.cn/apache/axis/axis2/java/core/1.7.1/ ...
- vb listview 的常用操作
常用操作:获取当前行数和列数: MsgBox "行数:" & ListView1.ListItems.Count & "列数:" & L ...
- CSS自学笔记(1):CSS简介
一.什么是CSS CSS(Cascading Style Sheet(级联样式表))是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言. ...
- 修改 tomcat 内存
在Jetty 的VM参数中设置: -Xms256m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=256m 在tomcat运行环境中设置: window环境 ...
- Oracle EBS-SQL (AR-1):检查应收收款发生额
SELECT SUM(nvl(dist.amount_dr,0))-SUM(nvl(dist.amount_cr,0)) FROM ar_cash_receipt_history_all hist, ...
- Silverlight Socket 实现收发信息
原文 http://www.cnblogs.com/ZetaChow/archive/2009/05/16/2237347.html 刚接触Silverlight的时候,除了其异步应用WCF.流媒体. ...
- [原]容器学习(一):动手模拟spring的IoC
介绍 学习经典框架的实现原理以及设计模式在其实际中的运用,是非常有必要的,可以让我们更好进行面向对象. 本篇文章就来模拟Spring的IOC功能,明白原理后,可以更好的使用它,进而为进行面向对象提供一 ...
- 每天学点Linux:一
软链接和硬链接: 软链接,又称符号链接,它的原理是通过一个文本文件记录真实文件在系统中的位置,然后在文件操作的时候通过该地址查找原文件然后对其操作.类似于Windows里面的快捷方式.软链接可以链接不 ...
- docker 数据映射方案
docker run -itd -v /data/:/data1 centos bash // -v 用来指定挂载目录, :前面的/data为本地目录,:后面的/data1 为容器里的目录: dock ...
- c++链接数据库测试,中文有问题
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <Windows.h& ...