1.引用(Reference)

1.1引用的基本语法

引用是C++对C的重要扩充,也存在与其他一些编程语言中,并不是C++的发明。通过引用,C++增加了

另外一种给函数传递地址的途径,这就是按引用传递(pass-by-reference)

引用就是已定义变量的别名

void test01(){

    int a = ;
//给变量a取一个别名b,语法:Type& ref = val;
int& b = a;
cout << "a:" << a << endl;
cout << "b:" << b << endl;
cout << "------------" << endl;
//操作b就相当于操作a本身
b = ;
cout << "a:" << a << endl;
cout << "b:" << b << endl;
cout << "------------" << endl;
//一个变量可以有n个别名
int& c = a;
c = ;
cout << "a:" << a << endl;
cout << "b:" << b << endl;
cout << "c:" << c << endl;
cout << "------------" << endl;
//a,b,c的地址都是相同的
cout << "a:" << &a << endl;
cout << "b:" << &b << endl;
cout << "c:" << &c << endl;
}

使用引用的注意事项

void test02(){
//1) 引用必须初始化
//int& ref; //报错:必须初始化引用
//2) 引用一旦初始化,不能改变引用
int a = ;
int b = ;
int& ref = a;
ref = b; //不能改变引用
//3) 不能对数组建立引用
int arr[];
//int& ref3[10] = arr;
}

1.2函数中的引用

最常见引用的地方实在函数的参数和返回值中。当引用被用作函数参数的时候,在函数内对任何引用的修改,将对函数外的参数

产生改变。相对比指针,引用具有更加清晰的语法。

void ValueSwap(int m,int n){
int temp = m;
m = n;
n = temp;
}
//地址传递
void PointerSwap(int* m,int* n){
int temp = *m;
*m = *n;
*n = temp;
}
//引用传递
void ReferenceSwap(int& m,int& n){
int temp = m;
m = n;
n = temp;
}
void test(){
int a = ;
int b = ;
//值传递
ValueSwap(a, b);
cout << "a:" << a << " b:" << b << endl;
//地址传递
PointerSwap(&a, &b);
cout << "a:" << a << " b:" << b << endl;
//引用传递
ReferenceSwap(a, b);
cout << "a:" << a << " b:" << b << endl;
}

1.3引用的本质

引用的本质在C++内部实现时一个指针常量(指针常量中,指针自身的值是一个常量,不可改变,始终指向同一个地址。在定义的同时必须初始化)

//发现是引用,转换为 int* const ref = &a;
void testFunc(int& ref){
ref = ; // ref是引用,转换为*ref = 100
}
int main(){
int a = ;
int& aRef = a; //自动转换为 int* const aRef = &a;这也能说明引用为什么必须初始化
aRef = ; //内部发现aRef是引用,自动帮我们转换为: *aRef = 20;
cout << "a:" << a << endl;
cout << "aRef:" << aRef << endl;
testFunc(a);
return EXIT_SUCCESS;
}

1.4指针的引用

1.5常量引用

void test01(){
int a = ;
const int& aRef = a; //此时aRef就是a
//aRef = 200; 不能通过aRef的值
a = ; //OK
cout << "a:" << a << endl;
cout << "aRef:" << aRef << endl;
}
void test02(){
//不能把一个字面量赋给引用
//int& ref = 100;
//但是可以把一个字面量赋给常引用
const int& ref = ; //int temp = 200; const int& ret = temp;
}
    [const引用使用场景]
常量引用主要用在函数的形参,尤其是类的拷贝/复制构造函数。
将函数的形参定义为常量引用的好处:
引用不产生新的变量,减少形参与实参传递时的开销。
由于引用可能导致实参随形参改变而改变,将其定义为常量引用可以消除这种副作用。
如果希望实参随着形参的改变而改变,那么使用一般的引用,如果不希望实参随着形参改变,那么使用常引用。

j

最新文章

  1. Win10系统怎样让打开图片方式为照片查看器
  2. Mac系统下显示和隐藏文件
  3. python——django使用mysql数据库(二)
  4. No2. S2错题本
  5. python 代码片段11
  6. 关于TbSchedule任务调度管理框架的整合部署
  7. 完全面向于初学者的Node.js指南
  8. 防止被dylib hook的小技巧
  9. MySQL所有函数及操作符
  10. 转换器4:手写PHP转Python编译器,语法解析部分
  11. iOS 之 protocol的相关问题
  12. 《CSS动画实用技巧》课程笔记
  13. JavaEE EL &amp; JSTL 学习笔记
  14. [转][scrapy] CannotListenError: Couldn’t listen on [Errno 98] Address already in use.
  15. JAVA通过继承Thread来创建线程
  16. 从0开始的Python学习012数据结构&amp;对象与类
  17. C# 利用ReportViewer生成报表
  18. A1064. Complete Binary Search Tree
  19. 重建索引报错-python数据分析
  20. [20171120]11G关闭直接路径读.txt

热门文章

  1. MariaDB(MySql)使用储存过程和随机函数插入10万条数据
  2. POJ-3974-Palindrome(马拉车)
  3. vue路由跳转push,replace,go
  4. java 项目 文件关系 扫描 注释注入(3)
  5. matplotlib(二):折线图
  6. 也谈Tcp/Ip协议
  7. Paint the Digits
  8. Codeforces 474D Flowers(DP)
  9. Java基础__随机生成1~15之间不重复的数字
  10. 「HEOI2016/TJOI2016」 排序