C++引用
图:LEGO小人仔
Guderian出品
笔记整理自《北京大学公开课:C++面向对象程序设计》
C++
跟C
相比,多了很多独特的内容,其中有很多都是为了实现面向对象编程范式而引入的,C++
的引用就是其一。
引用的概念
- 定义一个引用,并将其初始化为引用某个变量的通用写法:
类型名 & 引用名 = 某变量名
- 某个变量的引用,等价于这个变量,相当于该变量的一个别名
1 | int n = 7; |
- 定义引用时一定要将其初始化成引用某个变量,而不像指针可以指向某个变量也可以不指向某个变量
- 初始化后,它就一直引用该变量,不会再引用别的变量了(引用是从一而终的)
- 引用只能引用变量,不能引用常量和表达式
1 | double a = 3, b = 5; |
引用的应用
C
中,如何编写交换两个整型变量值的函数?
- 这样写吗?
1 | void swap(int a, int b) |
这是错误的,改变形参不会改变实参。
- 或者用指针?
1 | void swap(int *a, int *b) |
正确,但丑陋!
那么C++
中,如何编写交换两个整型变量值的函数?
引用作为参数
C++
示例:交换两个整数
1 | void swap(int & a, int & b) //a就是n1,b就是n2 |
引用作为返回值
1 | int n = 4; |
注意被引用的对象不能超过作用域,返回一个局部变量的引用是不合法的,但是,可以返回一个静态类型变量的引用。
常引用
定义引用时,在前面加const
关键字即为“常引用”。
1 | int n; |
1 | int n = 100; |
常引用和非常引用的转换
const T &
和T &
是不同的类型(千万要注意!!!)T &
类型的引用或T
类型的变量可以用来初始化const T &
类型的引用const T
类型的常变量和const T &
类型的引用则不能用来初始化T &
类型的引用,除非进行强制类型转换
参考并整理自《C++面向对象设计》郭炜,北京大学,感谢原作者!编辑时有删改