1.
指针可以为空(null)但没有空引用,引用必须初始化,并关联某个具体存在的对象。
char *pc = 0; // set pointer to null
char& rc = *pc; // make reference refer to
// dereferenced null pointer
string& rs; // error! References must
// be initialized
string s("xyzzy");
string& rs = s; // okay, rs refers to s
2.
指针初始化后可以改变,使它指向其它对象,但引用初始化后就一直与初始化它的对象关联,而不能改变。
string s1("Nancy");
string s2("Clancy");
string& rs = s1; // rs refers to s1
string *ps = &s1; // ps points to s1
rs = s2; // rs still refers to s1,
// but s1's value is now
// "Clancy"
ps = &s2; // ps now points to s2;
// s1 is unchanged
3.
应该使用引用的一种情况:当实现运算符(operator)时,返回一个引用而不要返回一个指针。
vector<int> v(10); // create an int vector of size 10;
v[5] = 10; // the target of this assignment is
// the return value of operator[]
如果
operator[]
返回一个指针,则有:
*v[5] = 10;
这使*v[5]看起来像个指针容器。
4.
建议:如果不能确保所关联的对象一直存在,或是不能肯定会一直关联此对象,那么最好使用指针,否则可以考虑引用。