引用详解

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型引用


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值