1.reference一定得代表某個對象,即reference必須有初值;而point沒有這種要求,因此它可以有null pointers。
2.沒有所謂得null reference意味著references可能會比使用pointers更有效率,因為使用reference之前不需要測試其有效性。
3.pointer可以被重新賦值,指向另外一個對象,而reference卻總是指向它最初獲得的那個對象,類似於常量指針。
注意這裡使用的誤區:
[cpp]
string a1("Jack");
string a2("Rose");
string &rs = a1;
string *ps = &a1;
上面的rs和ps都是指向了a1,若使用下面語句:
[cpp]
rs = a2;
此時rs仍然指向a1,但是a1的值現在變成了“Jack”;
而改變指針的值,
[cpp]
ps = &a2;
此時ps指向a2,並且a1沒有變化。
這個例子完全可以解釋引用就是一個指向常量的地址,如果將引用賦一個不同的值,那麼不是改變了引用的值,而是改變的值的地址。而指針則不會出現這種情況。
因此,需要考慮“不指向任何對象”的可能性或者“在不同的時間指向不同的對象”,只能采用pointer。而當確定“總是會代表某個對象”,而且“一旦代表了該對象就不能更改”,這時就采用reference。
還有一點,在c++中改變表達式的常量性和變異性的轉型操作符為const_cast,而const_cast仍然不能修改reference的指向對象的不變性。
4.最後一點,為了辨別是指向object還是object pointer數組時,例如數組int a[5],現在要使用a[2]的指針,那麼可以使用*a[2],而這種用法讓人產生誤解,以為是一個指針數組(實際上指針數組的表示方法為(*a)[2]),那麼最好用reference來代替,消除誤解。