1、引用的本质和分析
1、引用的意义:
引用作为变量别名存在,因此在一些场合可以代替指针。
引用相对于指针来说,具有更好的可读性和使用性。
2、举个栗子:
swap函数的实现和对比:
void swap(int &a, int &b)
{
int t = a;
a = b;
b = t;
}
void swap(int *a, int *b)
{
int t = *a;
*a = *b;
*b = t;
}
//函数中引用形参不需要进行初始化。-->> 怎么理解这句话?
3、特殊引用:
1、在C++中可以声明const引用。
2、const Type& name = var;
3、const 引用让变量拥有只读属性。//-->> C++中的const引用类似于C语言中的const的用法
4、代码:
int a = 4;
const int& b = a;
int *p = (int *)&b;
b = 5;//Error ,b是只读变量。
*p = 5;//OK
5、当使用常量对引用初始化时,C++会为常量分配内存空间,并且将引用名作为这段空间的别名。
1、const int &b = 1;
int *p = (int *)&b;
b = 5;//Error 只读变量
*p = 5;//OK
注意:使用常量初始化一个引用变量,是将该变量初始化为只读变量。
4、引用有自己的内存空间吗?
1、C++在编译过程中用指针常量作为引用的内部实现,所以引用所占内存空间的大小与指针相同。
2、所以引用的本质就是一个指针常量:Type &name ==>> Type *const name;
3、但是需要注意的是,在使用的角度来说,引用是一个别名,所以C++为了实用性而隐藏了存储空间这一细节。
5、指针的意义:
1、指针绝大多数情况下是代替指针。
2、功能性:可以满足多数需要使用指针的场合。
3、可以避免指针操作不当带来的错误。
4、简单易用,又不失功能强大。
6、函数返回引用
小结:
引用作为变量别名而存旨在代替指针。
const 引用使得变脸具有只读属性。
引用编译器内部实现是指针常量。
引用最终本质上还是指针。
引用可以尽可能的避开内存错误。