C++ 的指针继承于 C,若要移除指针,势必造成严重的兼容性问题。引用有几方面的用处,但我在 C++ 中引入它的主要目的是为了支持运算符重载。例如:
void f1(const complex* x, const complex* y) // 没有引用
{
complex z = *x+*y; // 难看
// ...
}
void f2(const complex& x, const complex& y) // 使用引用
{
complex z = x+y; // 看起来不错
// ...
}
更一般地,如果你想要同时拥有指针功能和引用功能,那就需要两种不同的类型(C++ 里就是这么干的)或者对一个单独的类型有两套不同的操作。例如,如果采用单一类型的话,则需要有给被引用的对象赋值的操作以及给引用/指针赋值的操作。这 可通过使用不同的运算符来完成(Simula 里就是这么干的)。例如:
Ref<My_type> r :- new My_type;
r := 7; // 赋值给对象
r :- new My_type; // 赋值给引用
或者,你也可以依赖类型检测系统(重载)。例如:
Ref<My_type> r = new My_type;
r = 7; // assign to object
r = new My_type; // assign to reference
原文地址:http://www.research.att.com/~bs/bs_faq2.html#pointers-and-references