引用和指针在汇编的层次上差不多,都是存储了一个地址。
但是引用不需要像指针一样,申请一块地址用于存放另一块地址的地址值,引用没有申请那一块地址,它就是所等于的那个。
引用在我看来就是别名,就是外号。那么外号的好处是什么呢,show you code
void text0(int value)
{
value++;
}
void text1(int* value)
{
(*value)++;
}
void text2(int &value)
{
value++;
}
int main() {
int a = 5;
text0(a);
text1(&a);
text2(a);
std::cout << a << std::endl;
}
text0,很明显不能够真正的让value自增。
text1,通过传入地址值,再将地址值解引用,将值真正的自增。
text2,如果从底层来看text2和text1做的是一模一样的东西,但是,从我们程序员的角度来看,代码非常的简洁美观,主要是读起来就知道是什么意思,没有像指针一样不好读,也不好写。虽然说指针的功能肯定更加的强大,但是这种时候还是要写引用,这时候能用引用就用引用。
引用解决了指针的缺点,引用声明的时候必须有初值,防止了为空,而且引用在它的生命周期内不能够再绑定其他对象。
int& r=val;