引用的使用及其本质

来源:互联网 发布:荥阳网络推广wang1314 编辑:程序博客网 时间:2024/06/02 02:38

引用的本质:
在C++中,为了避免像指针一样去访问某个变量,引入了引用这一类型。实际上,虽然确实在使用上没有了指针的复杂性,但是引用的本质实际上就是通过const指针实现的。所以,可以从这两个方面来理解引用:
引用是一个左值的标签,引用就代表着所引用的那个变量。可以通过引用改变所代表的那个变量的值。如:

    int x = 10;    int &i = x;    i = 5;

在这时,改变i,实际上就是改变所代表的那个变量的值。
引用的本质是const指针,等价与:

    int x = 10;    int * const i = &x;    (*i) = 5;

在这里,I是不能被改变的,将一直指向x。
使用引用
引用在声明时必须初始化:

    int x = 10;    int &i = x;    //int &i;//没有初始化是错误的    //i=x;

有指针的引用int *&p;和数组的引用int (&array)[];,但是没有引用数组和引用指针。原因是引用的地址是不可访问的。如果声明成 int &*p,则此时的引用就变成了引用了指针,而该指针是可变的,可以指向不同的变量,那么此时的引用也就成了一个可变的,可以指向不同的变量,就没有了引用本来的绑定的特性,这是不允许的;如果声明成了 int &array[],这时就相当于该数组的基本类型是引用,也就是说,该数组里装的全是引用类型,这时数组里的引用就可以作为左值使用,不是一个实体,但是数组中的元素要求是实体,所以不能有引用数组。
引用作为左值使用

int& fun(int i){ i++; return i; }
在该行代码中,返回的是一个引用,所以可以这样使用该函数:`fun(i) = 10`,因为fun返回一个引用,改引用可以作为一个左值被赋值。同样,在指针中,如果返回一个指针,亦可以通过该指针赋值,如:`int * fun(int *i){ (*x)++; return x; }`,就可以这样使用:`(*fun) = 10`。
原创粉丝点击