C++引用变量学习
版权所有,转载请注明来源
(1)reference variable(rv) 主要用处是作为方程的形式参数,使用rv 可以直接对原数据进行操作而不是该数据的拷贝,节省了时间和空间,尤其是对于结构体以及类的一个对象来说,对于普通类型数据来说,传值调用是不错的选择。
(2)使用 type & name 的形式定义一个引用变量,参考《c++ premier plus》上的例子,
int rats;
int & rodents = rats; (int & means “reference to an int variable”)
定义了一个rodents,它是指向rat的引用变量,初始化以后,rats and rodents有相同的值,指向相同的地方,可以互换使用,通俗的说,就是“一个东西,两种叫法”。
(3)rv必须在声明的时候初始化,初始化以后,指向的地方不再变化,相当于const 类型的指针,后续的赋值只能改变其值,不能改变地址。譬如
int & rodents = rats; 相当于
int * const pr = &rats;
(4)当函数(function)的形参(formal argument)为指向const 类型的rv,编译器会在以下两种情况下产生临时变量,
- 当实参类型正确,但不是“左值(lvalue)”
- 当实参类型不正确,但是可以转换为正确类型
(5)C++ 11 标准引入了新的称为“右值引用(rvalue reference)”的语法,因此原来的引用现在称为“左值引用(lvalue reference)”
(6)函数返回引用与返回值这两种方式,有什么区别?
对于“返回值”这种返回方式,首先return语句后的对象,会被拷贝到一个临时内存中,然后改临时内存中的数据在被拷贝到调用函数的相应对象中,但是如果是“返回引用”,return语句后的对象直接拷贝到调用函数相应的对象中,更快。
(7)const 类型的引用返回,有什么用?
使用const 类型的引用返回,可以避免对返回值进行修改
(8)不要返回一个存储类型只是local的变量的引用,因为当程序执行完该变量所在区域,该变量将不再存在,因此这是错误的设计。例子
int & test (int & x)
{
int temp;
temp = x;
return temp;
}
上述例子中,temp在test函数执行完毕后,将不再存在,因此返回temp的引用,程序将会出错奔溃
C++引用变量学习的更多相关文章
- C++学习笔记29,引用变量(1)
引用变量在创建的时候就必须初始化.无法创建一个未被初始化的引用. #include <iostream> using namespace std; int main() { int x=1 ...
- 【转】shell学习笔记(三)——引用变量、内部变量、条件测试、字符串比较、整数比较等
1.env显示当前的环境变量 2.PS1='[\u@\h \w \A] \$' 可以设置bash的命令与提示符. 3.echo $$ 显示当前bash的PID号 4.echo $?显示上一条指令的回传 ...
- Java基础-被final修饰的引用变量的指向
final修饰的引用变量一旦初始化赋值之后就不能再指向其他的对象,那么该引用变量指向的对象的内容可变吗?看下面这个例子: public class Test { public static void ...
- PHP GC垃圾回收机制之引用变量回收周期疑问
普通的引用变量的销毁大家都知道, 当unset的时候如果refcount = 0 则认为无用, 销毁. 但是手册中提到一点会有递归引用的问题,很是奇葩 代码如下 <?php $a = 1; $a ...
- C++引用变量(转)
引用变量 c++中引用变量的使用: 定义: int rate=80; int & pt=rate 1.pt 是引用变量,申明引用变量时必须将其初始化.pt 和rate 的值指向相同的内存变量 ...
- c#问答篇:对象与引用变量-----初学者的困惑
转自:http://www.cnblogs.com/huangyu/archive/2004/08/02/29622.html 从宏观的角度来看,对象是类的实例.比如: //定义一个名为Someone ...
- C++ primer(八)--内联函数 引用变量 引用传递函数参数 函数重载/模板/模板具体化
一.内联函数 常规函数和内联函数的区别在于C++编译器如何将他们组合到程序中.编译过程的最终产品是可执行程序--由一组机器语言指令组成.运行程序时,操作系统将这些指令载入到计算机内存中,因此每 ...
- [DB][mybatis]MyBatis mapper文件引用变量#{}与${}差异
MyBatis mapper文件引用变量#{}与${}差异 默认,使用#{}语法,MyBatis会产生PreparedStatement中.而且安全的设置PreparedStatement參数,这个过 ...
- PHP关于foreach使用引用变量的坑
写PHP好多年,但仍然会犯低级错误,今天遇到个 foreach中引用变量时的坑,PHP版本为 5.6.12 代码如下: <?php $arr = ['a', 'b', 'c', 'd', 'e' ...
随机推荐
- WisDom.Net 框架设计(一) 总体框架
WisDom.Net总体框架 1.目标 WisDom.Net 做为以后快速开发相关的软件的基础框架,实现用户,权限,角色,菜单,和工作流的管理功能.相关功能可以独立使用,快速用于其他程序的开发.预计 ...
- Word 中标题的编号变成黑框
问题: 在使用Word编写文档时,提前拟好的标题编号会突然变成黑框(黑色的方框,黑色的矩形),如下图 解决方案: 1.将光标定位到标题中,紧邻黑框的右侧 2.按键盘左方向键使方框变成黑色 4.按键盘的 ...
- 如何管理你的 Javascript 代码
今天不聊技术的问题,咱们来聊聊在前端开发中如何管理好自己的 Javascript 代码.首先,咱们先来说说一般都有哪些管理方式?我相信 seajs . requirejs 对于前端开发者而言都不陌 ...
- IBM服务器 IMM日志收集
在IBM X系列服务器背板上有一个" SYS MGMT"接口,用网线将此接口与笔记本连接起来,然后将笔记本的 IP地址配置成 192.168.70.0/24 这个网段的地址,然后 ...
- removing right click context menu options on recycle bin
Humpty is correct as always First you might want to make a backup of the reg key then remove the Wa ...
- magento后台 Fatal error: Call to a member function getId() on a non-object in错误
后台分类管理出现错误 Fatal error: Call to a member function getId() on a non-object in 在数据库中运行以下sql语句 INSERT I ...
- Android获取相册图片
1. AlertDialog的使用 2. 显示和隐式意图的区别 3. 相册页面的跳转 4. 选择完成后返回图片的获取 ----------------------------------------- ...
- Python 的“+”和append在添加字符串时候的区别
对于一个空的Python列表,往后添加内容有很多种,其中两种一个是用“+”直接添加内容,另外一种是Listname.append(x)来添加内容 其中,如果处理字符串 在使用“+”的时候,会将字符串拆 ...
- uva12538
12538 Version Controlled IDEProgrammers use version control systems to manage files in their project ...
- loadView与viewDidLoad不同 && loadView学习总结
loadView学习总结 UIViewController类或其子类会在初始化时创建一个UIView对象,会作为控制器的默认视图显示出来,可以通过self.view寻址访问.但没有调用loadView ...