C++引用详解

C++引用

define:引用就是变量的一个别名。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量,标识符为 & .

引用的优点:

引用传递相比较于值传递没有进行值拷贝操作,因此提高了程序的运行效率;同时引用传递相比较于指针传递要简单,易于理解,而且可以提高程序的执行效率,在许多情况下能代替指针的操作。

引用的声明方法

[类型标识符] &[引用名]=[目标变量名]
eg:int x;int &rx=x; //声明变量x的引用rx

注意

1.&在此不是求地址运算,而是起标识作用。

2.引用在声明时就必须对它进行初始化
引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。ra=1;等价于 a=1;

3.引用本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。故:对引用求地址,就是对目标变量求地址。&ra与&a相等。

4.不能为数组建立引用,因为数组是由若干个元素组成,所以不能建立数组的别名。

5.不能建立void类型的引用(任何实际存在的变量都是属于非void类型的,void的含义是无类型或空类型,void只是在语法上相当于一个类型而已。

6.可以建立指针变量的引用,但是不能建立指向引用的指针(引用不是一种独立的数据类型)

int a=2;
int *p=&a;
int *rp=p;     //rp是一个指向整型变量的指针变量的引用,初始化为p

7.常引用
可以用const对引用加以限制,常引用声明方式:

const 类型标识符 & 引用名=目标变量名;

用这种方式声明的引用,不能通过引用对目标变量的值进行修改,从而使引用的目标成为const,达到了引用的安全性。

int a=3;
cosnt int &ra=a;
ra=1;       //错误,不能通过对const引用的目标变量进行值修改
a=1;        //正确,a是普通变量,通过变量名修改是合法的

8.可以用常量或表达式对引用进行初始化,但此时必须用const作声明

int a=3;
const int &b=a+3;

编译器将此代码块理解为:

int temp=a+3;
const int &b = temp;

9.引用作为函数返回值

#include<iostream>
using namespace std;
int &Max(int &x,int &y)
{
    return(x>y)?x:y;
}
int main()
{
    int a = 2,b=3;
    cout<<"a="<<a<<" b="<<b<<endl;
    Max(a,b)=4; //函数返回两个参数中的大数本身,故此处为b赋值
    cout<<"a="<<a<<" b="<<b<<endl;
    return 0;
}

程序运行结果如下:
a=2 b=3
a=2 b=4
定义返回引用的函数时,注意不要返回对该函数内的自动变量的引用。否则,因为自动变量的生存期仅局限于函数内部,当函数返回时,自动变量就消失了,函数就会返回一个无效的引用。

函数返回的引用是对某一个函数参数的引用,而且这个参数本身也是引用类型,这样才能保证函数返回的引用由意义。

你可以期待太阳从东方升起,而风却随心所欲地从四面八方吹来。 ----萨特

相关推荐

  1. C++引用详解

    2024-04-01 23:28:02       14 阅读
  2. C++ 引用

    2024-04-01 23:28:02       33 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-01 23:28:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-01 23:28:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-01 23:28:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-01 23:28:02       18 阅读

热门阅读

  1. 探索ChatGPT在学术论文撰写中的应用

    2024-04-01 23:28:02       15 阅读
  2. dcat笔记

    2024-04-01 23:28:02       11 阅读
  3. 常用的设计模式(单例模式和工厂模式)

    2024-04-01 23:28:02       16 阅读
  4. 使用 SQLite数据库,磁盘数据库,也叫本地数据库

    2024-04-01 23:28:02       14 阅读
  5. 关于过四级的一些神级技巧

    2024-04-01 23:28:02       18 阅读
  6. FastAPI+React全栈开发12 搭建FastAPI开发环境

    2024-04-01 23:28:02       12 阅读
  7. 规则引擎QLExpress和Drools的对比

    2024-04-01 23:28:02       13 阅读