C++基础——引用类型变量

C++引用详解
本文深入解析C++中的引用概念,包括引用变量的创建、作为函数参数的使用方式,以及引用与指针的区别。探讨了引用在函数参数中的优势,尤其是在处理大型结构和类时的效率提升,同时强调了在函数中使用常量引用的重要性。

相关概念

​ 引用变量是复合类型。引用是已定义的变量的别名。引用变量的主要作用是用作函数的形参。通过将引用变量用作参数,函数将使用原视数据,而不是其副本。这样除了指针之外,引用也为函数处理大型结构提供了一种非常方便的途径,同时对于射击类来说,引用也是必不可少的。

创建引用变量

C++给&符号赋予了另一个含义,将其用来声明引用。例如,要将stu作为student变量的别名,可以这样做:

int student;
int &stu = student;

其中,&不是地址运算符,而是类型标识符的一部分。他们指向相同的值和内存单元。且,必须在声明引用时将其初始化,而不能像指针一样先声明在再赋值。

int students;
int & stu;
stu = students;//这是错的

将引用用作函数参数

​ 用作函数参数时,使得函数中的变量名成为调用程序中变量的别名。这种传递参数的方法称为按引用传递。按引用传递允许被调用的函数能够访问调用函数中的变量。

#include <iostream>
using namespace std;
void swap(int &a,int &b){
    int t=a;
    a=b;
    b=t;
}
int main(){
    int a,b;
    cin>>a>>b;
    swap(a,b);
    cout<<a<<" "<<b;
    return 0;
}

引用的特别之处

若想让函数使用传递给他的信息,而不对这些信息进行修改,同时又想使用引用,则应该使用常量引用。当数据比较大(如结构和类)时,引用参数将很有用。

double refcube(const double &ra);

使用参数传递给接收引用参数的函数时,对于传递引用的限制更严格。

int fun(int &a){
    return 2+a;
}
int main(){
	int a;
	cin>>a;
    cout<<fun(a+3);//错误的引用
    return 0;
}

程序中的引用是错误的。函数参数中a是一个变量的别名,则实参应该是一个变量,否则代码不合理。

int fun(const int &a){// 常量引用
    return 2+a;
}
int main(){
	int a;
	cin>>a;
    cout<<fun(a+3);//此时将使用临时变量来存储值
    return 0;
}

如果函数调用的参数不是佐治或与相应的const引用参数的类型不匹配,则C++将创建类型正确的匿名变量,将函数调用的参数的值传递给该匿名变量,并让参数来引用该变量。

尽可能使用const

理由如下

  • 使用const可以避免无意中修改数据的编程错误
  • 使用const使函数能够处理const和非const实参,否则只能接受非const数据。
  • 使用const引用使函数能正确生成并使用临时变量。

将引用用于结构

使用结构引用参数的方式与使用基本变量引用相同,只需在声明结构参数时使用引用运算符&即可。

typedef struct{
    int data;
    int made;
}node;
void set_fun(node * ft);// 在函数中将指向该结构的引用作为参数

何时使用引用参数

使用引用参数的两个主要原因

  • 能修改调用函数中的数据对象,相比较指针会更方便
  • 通过传递引用而不是整个数据对象,可以提高程序的运行速度

当数据较大时,例如结构和类对象,推荐使用引用参数,引用参数实际上时基于指针的代码的另一个接口。

  1. 对于使用传递的值而不作修改的函数
    1. 数据对象很小,如内置数据或小型结构,则按值传递
    2. 数据对象时数组,则使用指针,并将指针声明为指向const的指针
    3. 数据对象是较大的结构,则使用const 指针或const引用。
    4. 数据对象时类对象,则使用const引用
  2. 对于修改调用函数中数据的函数
    1. 数据对象是内置数据类型,使用指针。
    2. 数据对象是数组,使用指针。
    3. 数据对象是结构,使用指针或引用。
    4. 数据对象是类对象,则使用引用。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值