C++中的引用
一,C++中引用的基础知识
1.引用的基本概念
1.所谓的引用其实就是对变量起“别名”。引用和变量对应得是相同的内存,修改引用的值,变量的值也会改变,和指针类似。
2.引用在定义的时候必须要初始化,初始化后就用引用的对象绑定在一起了。
3.引用本身不是对象,不能定义引用的引用。
2.引用的意义
1.引用作为其他变量的别名存在,因此在一些场合可以用来替代指针。
2.引用相对于指针来说具有更好的可读性和实用性。
3.引用的定义方式
数据类型 &引用名称 = 变量;
# include<iostream>
using namespace std; int main()
{
// 定义变量a
int a = ;
// 定义引用b
int &b = a; return ;
}
二,引用的本质
1.引用的本质剖析
# include<iostream>
using namespace std; int main()
{
// 定义变量a
int a = ;
// 定义引用b
int &b = a;
// 引用一旦初始化,就不再改变本身所绑定的对象,因此引用很想一个const修饰的常量
cout << "&a = " << &a << endl;
cout << "&b = " << &b << endl;
// 通过打印地址,发现变量和引用的地址相同,因此引用本质是一个指针 return ;
}
2.引用的本质分析
1.引用的初始化之后不允许被修改,因此引用是一个常量。
2.引用的地址和变量本身的地址一样。因此引用是一个指针。
3.引用的本质是一个常量指针,只是C++编译器帮助我们进行了自动取地址操作和解引用操作。
4.上述的案例的本质:int &b = a; 相当于 int * const b = &a;
三,引用的重点
1.引用作函数参数
引用作函数参数可以用来替代指针,在函数内部操作引用,就可以修改函数外部变量的值。
2.引用作函数返回值(此处涉及类的拷贝构造函数)
引用作函数返回值,如果返回的是栈变量,则实际返回的是该变量的一份拷贝。
3.指针引用
引用是指针类型的,例如:Teacher teacher = {"王刚",21};Teacher * &t = &teacher;
4.常引用
使用变量初始化引用,使引用具有只读属性,保护了引用所指向的对象,防止被函数内部修改。
使用字面量初始化引用,例如:const int &a = 10;是可以的,这里会在编译期间对字面量常量分配内存空间,在上一节的const中有提过。
C++中的引用的更多相关文章
- php中关于引用(&)详解
php中关于引用(&)详解 php的引用(就是在变量或者函数.对象等前面加上&符号) 在PHP 中引用的意思是:不同的变量名访问同一个变量内容. 与C语言中的指针是有差别的.C语言中的 ...
- 浅谈Java中的引用
在Java语言中,引用是指,某一个数据,代表的是另外一块内存的的起始地址,那么我们就称这个数据为引用. 在JVM中,GC回收的大致准则,是认定如果不能从根节点,根据引用的不断传递,最终指向到一块内存区 ...
- error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCRTStartup 中被引用
MSVCRTD.lib(crtexew.obj) : error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCRTStartup 中被引用 Debug ...
- c++中的引用与指针的区别
http://blog.csdn.net/lyd_253261362/article/details/4323691 c++中的引用与指针的区别 ★ 相同点: 1. 都是地址的概念: 指针指向一块内存 ...
- CSAPP读书随笔之一:为什么汇编器会将call指令中的引用的初始值设置为-4
CSAPP,即<深入理解计算机系统:程序员视角>第三版,是一本好书,但读起来确需要具备相当的基本功.而且,有的表述(中译文)还不太直白. 比如,第463页提到,(对于32位系统)为什么汇编 ...
- 转 mvc项目中,解决引用jquery文件后智能提示失效的办法
mvc项目中,解决用Url.Content方法引用jquery文件后智能提示失效的办法 这个标题不知道要怎么写才好, 但是希望文章的内容对大家有帮助. 场景如下: 我们在用开发开发程序的时候,经常 ...
- 内部类访问外部类的变量必须是final吗,java静态方法中不能引用非静态变量,静态方法中不能创建内部类的实例
内部类访问外部类的变量必须是final吗? 如下: package com.java.concurrent; class A { int i = 3; public void shout() { cl ...
- 理解Java中的引用传递和值传递
关于Java传参时是引用传递还是值传递,一直是一个讨论比较多的话题,有论坛说Java中只有值传递,也有些地方说引用传递和值传递都存在,比较容易让人迷惑.关于值传递和引用传递其实需要分情况看待,今天学习 ...
- VB6中的引用传递 与 VB.NET中的引用传递的区别
首先注意一点,在VB6中缺省参数传递的方式是:引用传递,而在VB.NET中缺省参数传递的方式是:值传递. 然后我们看下面VB6中的引用传递与VB.NET中的引用传递的对比. VB6中的引用传递 Pri ...
- [转] 深入探讨C++中的引用
引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确.灵活地使用引用,可以使程序简洁.高效.我在工作中发现,许多人使用它仅仅是想当然,在某些微妙的场合,很容易出错,究其原由,大多因为没有 ...
随机推荐
- NYOJ 1007
在博客NYOJ 998 中已经写过计算欧拉函数的三种方法,这里不再赘述. 本题也是对欧拉函数的应用的考查,不过考查了另外一个数论基本定理:如何用欧拉函数求小于n且与n互质所有的正整数的和. 记eule ...
- 匹夫细说C#:庖丁解牛迭代器,那些藏在幕后的秘密
0x00 前言 在匹夫的上一篇文章<匹夫细说C#:不是“栈类型”的值类型,从生命周期聊存储位置>的最后,匹夫以总结和后记的方式涉及到一部分迭代器的知识.但是觉得还是不够过瘾,很多需要说清楚 ...
- ABP文档 - Mvc 视图
文档目录 本节内容: 简介 AbpWebViewPage 基类 简介 ABP通过nuget包Abp.Web.Mvc集成到Mvc视图里,你可以像往常那样创建常规的视图. AbpWebViewPage 基 ...
- Android总结之链式调用(方法链)
前言: 最近在学习总结Android属性动画的时候,发现Android的属性动画设计采用了链式调用的方式,然后又回顾了一下了以前接触的开源框架Glide也是采用链式调用的方式,还有最近火的一塌糊涂的R ...
- iOS逆向工程之Hopper中的ARM指令
虽然前段时间ARM被日本软银收购了,但是科技是无国界的,所以呢ARM相关知识该学的学.现在看ARM指令集还是倍感亲切的,毕竟大学里开了ARM这门课,并且做了不少的实验,当时自我感觉ARM这门课学的还是 ...
- Linux学习之探索文件系统
Linux,一起学习进步- ls With it, we can see directory contents and determine a variety of important file ...
- js 入门级常见问题
写在前面:以下是个人总结的关于js常见的入门级的问题一些总结. js是有 ECMAScript Dom Bom 三部分组成. 1,undefined,NaN,Null,infinity 1) unde ...
- Atitit.软件研发团队建设原理与概论 理论
Atitit.软件研发团队建设原理与概论 理论 培训 团队文化建设(内刊,ppt,书籍,杂志等) 梯队建设 技术储备人才的问题 团队建设--小红花评比. 团队建设--文化墙.doc 户外拓展 1. 团 ...
- 海鑫智圣:物联网漫谈之MQTT协议
什么是MQTT协议 MQTT(消息队列遥测传输协议)是IBM在1999年专门针对物联网等应用场景来制订的轻量级双向消息传输协议,它主要是为了解决物联网上使用到的设备的互相通信的问题,以及这些设备与后端 ...
- SQL-类型转换函数
CAST ( expression AS data_type)CONVERT ( data_type, expression,[style]) Select '您的班级编号'+ 1 错误这里+是数学 ...