引用

引用 :

引用的概念及用法:

  1. 引用不是定义一个新的变量,而是给一个已经定义的变量重新起一个别名。
  2. 定义的格式:类型&引用变量名
  3. 引用的特点:
1.一个变量可以取多个别名
2.引用必须初始化
3.引用只能在初始化的时候引用一次,不能改变为再引用其他的变量。

代码分析:

void Test1()
{
int a = 1; int& b = a;
a = 2;
b = 3;
int& c = b;  // 引用一个引用变量,别名的别名
c = 4;
}
  • const 引用:(const权限只能缩小不能放大)

——当不希望函数内参数的值被改变时,尽量使用常引用传参

void Test2 ()
{
int d1 = 4;
const int & d2 = d1;
d1 = 5; // d1改变 d2的值也会改变。
//d2 = 6;   // 不能给常量(不能被修改的量)赋值

const int d3 = 1; const int & d4 = d3;
//int&d5 = d3;
const int & d6 = 5; // 常量具有常性,只有常引用可以引用常量

double d7 = 1.1;
//int& d8 = d7; //d7是double类型,d8是int,d7赋值给 d8时要生成一个临时变量
// 也就是说d8引用的是这个带有常性的临时变量,所以不能赋值。
const int& d9 = d7;

}

  • 引用作参数:(如果形参为引用类型,形参是实参的别名)
void Swap(int &left, int &right) // 这里能实现交换吗?
{
    int temp = left; 
    left = right;
    right = temp;
}

测试一下:

int main()
{
    int a = 10;
    int b = 12;
    cout << a - b << endl;
    Swap(a,b);
    cout << a - b << endl;

    system("pause");
    return 0;
}

这里写图片描述
如果是简单的值传递,无法实现交换,引用可以。



  • 引用作返回值:
int &ADD(int a, int b)
{
    int sub = a + b;
    return sub;

}


int main()
{
    int a = 3;
    int b = 4;
    int c = ADD(a, b);
    cout << "c:" << c << endl;
    system("pause");
    return 0;

}

这里写图片描述

  • 通过汇编看函数栈帧调用
    这里写图片描述

结论:
1.不要返回一个临时变量的引用。
2.如果返回对象出了作用域依旧存在,最好使用引用返回(更高效)。



引用和指针的区别和联系:

  1. 引用只能在定义的时候初始化一次,之后不能改变指向其他变量(从一而终),指针变量的值可变。
  2. 引用必须指向有效的变量,指针的值可以为空。
  3. sizeof指针对象和引用对象的意义不太一样。
sizeof引用变量——得到的是所指向变量的大小
sizeof指针变量——得到的是对象地址的大小
  • 指针和引用自增(++) 自减(- -)的意义不一样。
  • 一般来说,引用比指针更安全。(指针可能存在野指针的隐患)
  • 这里写图片描述
阅读更多
个人分类: c++
上一篇虚函数&amp;&amp;虚表以及虚表在几种继承间的情况
下一篇在杨氏矩阵中查找数据
想对作者说点什么? 我来说一句

cookie jquery引用文件

2017年09月15日 33KB 下载

关于 Excel引用

2009年04月07日 22KB 下载

boot.js——前端引用的js

2018年02月04日 16KB 下载

Microsoft.JScript(引用

2018年03月16日 237KB 下载

System.Web.Http.dll(引用)

2018年03月16日 117KB 下载

Oracle数据库引用文件

2017年09月11日 192KB 下载

JQuery.md5文件

2017年09月15日 5KB 下载

System.Web.Http.WrbHost(引用)

2018年03月20日 103KB 下载

AutoIt所有引用包文件

2009年09月13日 5.46MB 下载

c++之十引用和拷贝构造函数

2010年04月25日 468KB 下载

没有更多推荐了,返回首页

关闭
关闭