基础议题部分说的是:pointer(指针)、reference(引用)、casts(类型转换)、array(数组)、constructor(构造函数)。
条款1:仔细区别pointers 和references
Pointer 和reference 都做类似的事情,都需要间接参考到其他的对象。那么具体而言,何时何地该使用哪一个?
首先你要明确没有所谓的null reference。 一个reference 必须总是代表某个对象,但是一个pointer是可以设为null的。所以如果你有一个变量,其目的是用来指向另一个对象,但是也有可能它不指向任何对象,那么你应该使用pointer,因为你可以将pointer设为null。换个角度说,如果这个变量总是代表一个对象,也就是说你的涉及并不允许这个变量为null,那么你应该使用reference。
由于reference一定得代表某个对象,C++因此要求reference必须有初值。
String& rs;//错误,reference必须被初始化
String s(“xyzzz”);
String& rs=s;//正确的,rs指向s
但是pointer 就没有这样的限制
String* ps;//有效的,但是风险高
Pointer 和reference的另外一个重要差异就是pointer可以被重新赋值,指向另外一个对象,reference确总是指向它最初获得的那个对象。
结论:当你知道你需要指向某个东西,而且绝不会改变指向其他东西,或是当你实现一个操作符而其语法需求无法由pointer达成,你就应该选择reference。任何其他时候请采用pointer。