引用详解

Posted Ijuan_0712

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了引用详解相关的知识,希望对你有一定的参考价值。

1.引用即别名。
int a = 10;
int& b = a; // 定义b是整型变量a的别名——引用
cout << b << endl; // 10
b++;
cout << a << endl; // 11
2.引用型参数
一个函数引用参数实际上就是调用者实参的别名。对该参数的修改将直接影响实参的值。
1)通过函数引用型参数可以修改实参的值。
2)通过向函数传递引用型参数,避免数据拷贝的开销。如果该函数不需要修改实参的值,那么最好使用常引用形式的形参,以防止在函数对实参进行意外的修改。
3.引用型返回值
1)不要从函数中返回对局部变量的引用。
2)可以返回对全局变量、静态局部变量、实参变量、动态分配的内存、成员变量的引用。
4.引用是一种非实体类型,在高级语言的层面上,不占用内存,但是编译器会通过指针实现对引用的操作,因此在性能上与指针相当。
5.引用和指针在很多方面具有相似的特性和功能,但还是有些差别:
1)指针可以不做初始化,但是引用必须初始化。
int a = 10;
int* p; // OK
p = &a;
int& r; // ERROR
r = a; // 赋值
int& r = a; // 初始化,OK
2)指针的目标可以修改,但是引用的目标不可修改
int a, b;
int* p = &a;
p = &b; // OK
int& r = a;
r = b; // 将b值赋给了a
3)可以定义指向指针的指针,但是不能定义引用引用的引用
int a;
int* p = &a;
int** pp = &p; // OK
int& r = a;
int&& rr = r; // ERROR int&rr=r;//OK以引用为初始值,实际上是以引用绑定的对象作为初始值
4)可以定义引用指针的引用,但是不能定义指向引用的指针
int* p;
int*& rp = p; // OK
int a;
int& r = a;
int&* pr = &r; // ERROR
5)可以定义指针数组,但是不能定义引用数组,可以定义数组引用
int a, b, c;
int* parr[] = &a, &b, &c; // OK
int& rarr[] = a, b, c; // ERROR
int arr[] = 1, 2, 3;
int (&rarr)[3] = arr; // OK 6.符合类型定义中,基本类型和类型修饰符的关系,其实后者不过是声明符号的一部分而已:
int i = 1025, *p = &i, &r = i;//i是一个int型的数,p是一个int型指针,r是一个int型引用  

以上是关于引用详解的主要内容,如果未能解决你的问题,请参考以下文章

C++11新特性详解

C++11新特性详解

MapSetList集合差别及联系详解

MapSetList集合差别及联系详解

C++引用详解

C++引用详解