C++:引用

1 引用

1.1引用概述

在C++中提出佐治引用的概念。如果不加特殊声明,一般认为引用指的都是左值引用。引用实际上是一种隐式指针,它为对象建立一个别名,通过操作符&来实现,引用的形式如下:

数据类型 &表达式

例如:

int a=10;

int & ia=a;

ia=2;

定义了一个引用变量ia,它是变量a的别名,对ia的操作与对a的操作完全一样。ia=2把2赋值给a,&ia返回a的地址。执行ia和执行a=2等价。

使用引用的说明:

  1. 一个C++引用被初始化后,无法使用它在去引用另一个对象,它不能被重新约束。
  2. 引用变量只是其他对象的别名,对它操作与原来对象的操作具有相同的作用。
  3. 指针变量与引用有两点主要区别:一是指针式一种数据类型,而引用不是,指针可以转换为它所指向变量的数据类型,不能进行数据类型转化,以便赋值运算符两边的类型相匹配;而在使用引用时,系统要求引用和变量的数据类型必须相同,不能进行数据类型转换。二是指针变量和引用变量都用来指向其他变量,但指针变量使用的语法要复杂一些;而在定义了引用变量后,其他使用方法与普通变量相同。
int a;

int *pa=&a;

int &ia=a;

4.引用应该初始化,否则会报错。

int a;

int b;

int &a;

编译器会报出“references must be initialized”这样的错误,造成编译不能通过。

1.2 右值引用

右值引用时C++11新增加的一个非常量的引用类型。它的形式为:

类型 && i = 被引用的对象

右值引用可以理解为右值的引用,当右值引用初始化后,临时变量消失。

#define _CRT_SECURE_NO_WARNINGS 1

#include<iostream>

using namespace std;

int get()

{

    int i = 4;

    return i;

}

int main()

{

    int&& k = get() + 4;

    k++;

    cout << "k的值为:" << k << endl;

    system("pause");

    return 0;

}

右值引用只可初始化于右值,但右值引用实际上是一个左值,它具有临时变量的数据类型。

右值引用与左值引用的相同之处:

  1. 一个右值引用被初始化后,无法使用它再去引用另一个对象,它不能被重新约束。
  2. 右值引用初始化后,具有该类型数据的所有操作。

2. 函数与引用

2.1 使用引用传递参数

在C++中,函数参数的传递有两种,分别是值传递和引用传递。所谓值传递,是指在函数调用时,将实际参数的值复制一份传递到调用函数中,这样如果在调用函数中修改了参数的值,也不会影响实际参数的值。而引用传递恰恰相反,如果函数按引用方式传递,在调用函数中修改了参数的值,其改变会影响到到实际参数。

2.2 指针和引用

引用传递参数与指针传递参数能达到相同的目的。如果使用指针的引用,就可达到在函数体内改变指针地址的目的。

2.3 右值引用传递参数

使用字面值,如1、3.15f、true,或者表达式等作为临时变量作为函数实参传递时,按左值引用传递参数都会被编译器组织。而进行值传递时,将会产生一个和参数同等大小的副本。C++通过右值引用传递参数,不会申请局部变量,也不会产生参数副本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sɪʟᴇɴᴛ໊ོ5329

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值