C++提供了&引用变量类型的定义,另外还提供了一个const限定符。
引用类型的变量实际上是一个别名,这个功能类似数组的名字。
从某种意义上说引用类型和指针类型提供了类似的操作手段,只不过一个保留原有变量的访问手段,一个需要使用*或这个->的访问手段,他们如果没有const的限定符,都可以修改原有内存空间中的值。不过引用是别名指针是实际存在的内存变量,这是一个本质的区别。
C++提供引用的机制有几个用途,这些方面的用途是指针无可替代的:
1. 定义赋值构造函数(重载操作符的特例)
2. 定义拷贝构造函数
3. 重载操作符
4. 配合STL算法库定义判定式的函数或者操作类的函数
C++的引用机制如果和指针是相同的,那么引用机制很可能会被剔除掉,但是,C++并没有这么做,也就是引用有其本身的意义。上面提到的几个个应用场景是我能想到的,可能还有其他的场景,欢迎指正。
指针和引用就其他方式而言基本上可以等同,所以我不是很情愿在代码中看到所谓的“指针的引用”,因为这种类型的引用是没有任何实际的意义,他并没有改变指针变量的访问方式,也没有提供额外的效率提升,重要的是它还会引发一些不知名的编译错误,举个例子:
从上面的源码和编译错误可以看出int * 的类型的变量是不能够给const int * & 的变量赋值的,但是可以给 int * & 的变量赋值,也可以给 const int * 的变量赋值,读者可以自行做个试验。
总结:指针的引用在我目前的掌握是没有任何实际的意义的,如果不想改变指针变量的所指向的空间的值可以定义const TYPE *的形式。