1.引用的概念
引用即相当于给变量取了一个别名,例如int a=10;int& a1=a;此时a1与a都代表同一块内存空间,可以通过a1来修改a中的值。
2.引用的特性
1.引用在定义时必须初始化。
2. 引用一旦引用一个实体,再不能引用其他实体。
3. 一个变量可以有多个引用。
4.在定义时必须保持类型一致。
5.无法定义数组的引用。(感觉上是的)
3.const引用
double d = 12.34;const int& rd = d;这段语句看上去是错误的,因为类型不仅不一致,d是变量,rd是常量类型,更应该编译错误。但是结果是可以编译成功,原因在于rd再被赋值的时候是临时变量,具有常量属性,所以可以成功,所以如果把const去掉就无法编译成功。
4.引用作函数参数与返回值
1.引用作函数形参与指针作形参很像,引用作参数只是将形参作为接收到的实参的别名,因此不会对变量空间中的内容进行拷贝。传参时实参必须是变量名。
2.作返回值时,返回值的生命周期必须大于调用的函数的生命周期。返回引用的效率比返回值的效率高。
5.引用的底层实现
引用的底层实现就是指针。
6.引用与指针的区别
1.引用在定义时必须初始化,指针可以不初始化。
2.只有一级引用,没有多级引用,指针可以有多级。
3.引用自加是内容自加,指针自加是地址偏移量。
4.sizeof量的是引用的内容大小,量指针则是指针类型的大小。
5.没有空引用,但有空指针。
6.引用更加安全。
7.指针需要解引用。
8.引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何一个同类型实体。
内联函数:
关键字:inline,在函数前面加inline,可以将函数定义为内联函数,内联函数即在编译阶段将函数直接展开,可以减少函数栈帧,提高效率。但是如果函数较复杂,包含循环递归等,编译器则不会展开,因为inline相当于对编译器的“建议”,而不是命令,复杂的函数即便有inline修饰,编译器也不会将其展开,否则代码量会过大,例如递归。
来源:oschina
链接:https://my.oschina.net/u/4249634/blog/4262047